SpringSecurity用户认证和授权

简介
Spring Security是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型,他可以实现强大的Web安全控制,对于安全控制,我们仅需要引入spring boot-starter-security模块,进行少量的配置,即可实现强大的安全管理!
记住几个类:
●WebSecurityConfigurerAdapter: 自定义Security策略
●AuthenticationManagerBuilder:自定义认证策略
●@EnableWebSecurity: 开启WebSecurity模式 ,@Enablexxxx 开启某个功能
Spring Security的两个主要目标是“认证"和“授权”(访问控制)
“认证”(Authentication)
“授权”(Authorization)
这个概念是通用的,而不是只在Spring Security中存在。

1. 引入spring boot-starter-security

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

编写配置类

SpringSecurity用户认证和授权_第1张图片
这是一个固定的架子

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
    }
}

进行认证与授权

package com.wangrui.config;

import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    //授权 使用了链式编程
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //super.configure(http);
        http.authorizeRequests()
                .antMatchers("/level1/**").hasRole("vip1")
                .antMatchers("/level2/**").hasRole("vip2")
                .antMatchers("/level3/**").hasRole("vip3");
        //没有权限默认会到登录页面,需要开启登录的页面
        http.formLogin();//默认自动生成登录页面 可以去看formLogin源码
    }
    //认证, SpringBoot 2.1.x 可以直接使用
    //密码编码: PasswordEncode
    //在Spring Security 5.0+ 新增了很多加密方法

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //super.configure(auth);
        //这些数据可以从数据库获取  auth.jdbcAuthentication()
        //此处使用内存中获取
        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
                .withUser("wangrui").password(new BCryptPasswordEncoder().encode("123456")).roles("vip2","vip3")
                .and()
                .withUser("root").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2","vip3")
                .and()
                .withUser("guest").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1");
    }
}

There is no PasswordEncoder mapped for the id “null”

  • 需要对密码进行加密,不能使用明文密码传输
    SpringSecurity用户认证和授权_第2张图片

你可能感兴趣的:(SpringSecurity)