Spring Security权限认证管理

针对项目的安全管理,Spring家族提供了安全框架Spring Security,它是一个基于Spring生态圈的,用于提供安全访问控制解决方案的框架。

Spring Security的安全管理有两个重要概念,分别是Authentication(认证)和Authorization(授权)。其中,认证即确认用户是否登录;授权即确定用户所拥有的功能权限。

第一章系统默认用户认证

1.依赖

 



    org.springframework.boot
    spring-boot-starter-security



    mysql
    mysql-connector-java
    5.1.46



    org.springframework.boot
    spring-boot-starter-jdbc



    org.springframework.boot
    spring-boot-starter-thymeleaf



    org.springframework.boot
    spring-boot-starter-web



    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    2.1.3



    org.springframework.boot
    spring-boot-devtools
    runtime
    true



    org.springframework.boot
    spring-boot-configuration-processor
    true



    org.projectlombok
    lombok
    true



    org.springframework.boot
    spring-boot-starter-test
    test
    
        
            org.junit.vintage
            junit-vintage-engine
        
    



    org.springframework.security
    spring-security-test
    test

 

yml配置

 

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql:///yunhome?seUnicode=true;characterEncoding=UTF-8
    username: root
    password: root
  thymeleaf:
    cache: false

 

2.业务代码

 

@Controller
public class IndexController {
    @RequestMapping("/index")
    public String index(){
        //跳转index.html
        return "index";
    }
}

 

index.html

 




    
    首页


访问后台

访问前台

 

工程结构图

 

Spring Security权限认证管理_第1张图片

 

 

3.启动访问

运行启动类,控制台效果如下:

Spring Security权限认证管理_第2张图片

打开浏览器访问:http://localhost:8080/index

Spring Security权限认证管理_第3张图片

说明

    在Spring Boot项目中加入spring-boot-starter-security依赖启动器后,Security会 默认提供一个可登录的用户信息,其中用户名为user,密码随机生成,这个密码会随着项目 的每次启动随机生成并打印在控制台上。

输入用户名user和登陆密码

Spring Security权限认证管理_第4张图片

 

登录成功后,才会进入一开始访问的index.html页面

 

 

 Spring Security权限认证管理_第5张图片

 

第二章 自定义用户认证

 

    config包下创建一个配置类 SecurityConfig 继承 WebSecurityConfigurerAdapter 重写 configure(AuthenticationManagerBuilder auth) 方法 配置类上添加@EnableWebSecurity注解,开启安全管理功能,该注解中包含@Configuration

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override//重写认证方法
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
       //1.构建密码加密器
        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
	 //2.自定义两个用户信息(曹操,666,房东/大乔,123,租客)
        auth.inMemoryAuthentication().
                passwordEncoder(encoder).//密码加密
                withUser("曹操").
                password(encoder.encode("666")).
                roles("房东").
                and().//添加第二个用户
                withUser("大乔").
                password(encoder.encode("123")).
                roles("租客");
    }
}

 

2、需求

在index.html页面中,房东可以访问后台和前台,租客只能访问前台。

3、添加依赖

 



	org.thymeleaf.extras
	thymeleaf-extras-springsecurity5

 

改造index.html

添加sec名称空间  xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-
springsecurity5"

 




    
    首页



访问后台

访问前台

 

登录

 

Spring Security权限认证管理_第6张图片

登录成功之后

Spring Security权限认证管理_第7张图片

第三章jdbc用户认证

表数据

Spring Security权限认证管理_第8张图片

 

修改表数据

使用加密器对666和123加密:
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
String p666 = encoder.encode("666");
String p123 = encoder.encode("123");
System.out.println(p666);
System.out.println(p123);
将控制台输出的密文替换数据库中的原始密码

把打印出的加密密码放在数据库

 Spring Security权限认证管理_第9张图片

 

修改配置类

 

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Autowired//注入dataSource
    private DataSource dataSource;

    @Override//重写认证方法
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
        String p666 = encoder.encode("666");
        String p123 = encoder.encode("123");
        System.out.println(p666);
        System.out.println(p123);
     
      //连接jdbc认证用户信息
        auth.jdbcAuthentication().passwordEncoder(encoder).
                dataSource(dataSource).
                usersByUsernameQuery("select name ,psw ,1 from h_users where name=?")
               .authoritiesByUsernameQuery("select name  ,role  from h_users where name=?");

    }
}

说明

方法usersByUsernameQuery(sql)
	根据用户名去验证密码;默认查询语句为:
	select username,password,enabled from users where username = ?
	默认查询三个字段:用户名,密码,是否可用:1 为可用,0为不可用。
方法authoritiesByUsernameQuery(sql)
	根据用户名查询权限,默认sql为:
	select username,authority from authorities where username = ?
	默认查询两个字段:用户名,权限

 

测试效果:

使用曹操登录

Spring Security权限认证管理_第10张图片

使用貂蝉登录

 

 

 Spring Security权限认证管理_第11张图片

 

 

 

 

 

 

 

 

你可能感兴趣的:(spring,spring)