最近因为一些不能言语的原因,研究了一下Spring Security。因为感觉在使用上来说难度不大,所以把我研究的使用过程总结一下,放上来供大家学习研究思考进步的。我的思路大致就是,一个东西拿过来,先研究怎么使用,就跟我买了一个蓝牙耳机,第一步先看说明书,有的时候凭借多年经验,不用看说明书,就可以先用起来,用起来之后,再研究有什么新奇的功能,如果我是电子制造的,我可能会给它拆开看看里面是怎么回事,所以使用看上来没啥用,但其实有大用。

Spring Security使用总结一,简单的引用Spring Security,坐着火箭就入门了-LMLPHP

我的使用过程大致分为八步:

第一步:简单的依赖Spring Security

第二步:使用数据库,我主要是用来存储用户信息

第三步:使用模板,制作一个注册页面,用来用户注册

第四步:编写注册相关服务

第五步:加密相关内容

第六步:用户登录与认证

第七步:发放令牌,访问资源

第八步:授权,不同角色访问不同资源

废话说完了,开始搞,先创建一个java项目,先依赖springboot的web和Security的两个包

<dependencies>
    <!--SpringBoot Web服务-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.7.4</version>
    </dependency>

    <!--SpringSecurity启动器-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
        <version>2.7.4</version>
    </dependency>
</dependencies>

启动代码也是最简单的代码,只需要一个Spring的启动类和Controller类就可以,连配置文件都不需要

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

HelloWorldController

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloWorldController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello";
    }
}

启动的时候security会自动生成一个密码,这个密码就是初始的登录认证用的,就是随机的一个UUID。

Spring Security使用总结一,简单的引用Spring Security,坐着火箭就入门了-LMLPHP

启动成功之后,因为没有配置文件的原因,所以默认端口号是8080,访问localhost:8080/hello ,会弹出下面这个页面

Spring Security使用总结一,简单的引用Spring Security,坐着火箭就入门了-LMLPHP

默认用户名是user

密码就是上面那个被万箭头所指的那个和UUID很像的那么一串字符串,复制进去之后,点击Sign in按钮就会进入到这个页面,也就说明你的第一步已经成功了!

Spring Security使用总结一,简单的引用Spring Security,坐着火箭就入门了-LMLPHP

这个项目的结构就像下面这样简单,除了pom中依赖了Security之外,你甚至都看不到security的影子。

Spring Security使用总结一,简单的引用Spring Security,坐着火箭就入门了-LMLPHP

细节

虽然是最简单的一个security的使用,但是里面还是会有一些值得注意的细节,这是我在学习使用的时候遇到的问题,在这里指出来让大家作为前车之鉴。

Controller类上面的注解只能使用RestController,不能使用Controller,如果你使用了Controller注解,按照上面的步骤,你会得到下面这个页面。

Spring Security使用总结一,简单的引用Spring Security,坐着火箭就入门了-LMLPHP

出现这种情况的原因很简单,这就是Controller注解和RestController注解的区别

@RestController类中的所有方法只能返回String、Object、Json等实体对象,不能跳转到模版页面。@RestController相当于@ResponseBody + @Controller。

@Controller类中的方法可以直接通过返回String跳转到jsp、ftl、html等模版页面。在方法上加@ResponseBody注解,也可以返回实体对象。

@Controller 用来响应页面,@Controller必须配合模版来使用。

这个区别在后面的使用中也会用到,在这里就不详细说明了。

11-04 18:47