SpringSecurity 特点:

  • 和 Spring 无缝整合。
  • 全面的权限控制。
  • 专门为 Web 开发而设计。(新版本对整个框架进行了分层抽取,分成了核心模块和 Web 模块。单独引入核心模块就可以脱离 Web 环境)

模块划分

image.png

权限管理中的相关概念

image.png

SpringSecurity 基本原理

image.png

  • 代码底层流程:重点看三个过滤器:

    • FilterSecurityInterceptor:是一个方法级的权限过滤器, 基本位于过滤链的最底部。
      image.png
    • ExceptionTranslationFilter:是个异常过滤器,用来处理在认证授权过程中抛出的异常
      image.png
    • UsernamePasswordAuthenticationFilter :对/login 的 POST 请求做拦截,校验表单中用户名,密码。
      image.png

UserDetailsService 接口讲解

image.png

  • 返回值UserDetail

这个类是系统默认的用户"主题"

image.png

以后我们只需要使用 User 这个实体类即可!

image.png

PasswordEncoder 接口讲解

image.png

接口实现类

image.png

配置类
@Override
protected void configure(HttpSecurity http) throws Exception {
// 配置认证
http.formLogin()
.usernameParameter("user")//获取用户名
.passwordParameter("password")//获取登录密码
.loginPage("/index") // 配置哪个 url 为登录页面
.loginProcessingUrl("/login") // 设置哪个是登录的 url。
.successForwardUrl("/success") // 登录成功之后跳转到哪个 url
.failureForwardUrl("/fail");// 登录失败之后跳转到哪个 url
http.authorizeRequests()
.antMatchers("/layui/**","/index") //表示配置请求路径
.permitAll() // 指定 URL 无需保护。
.anyRequest() // 其他请求
.authenticated(); //需要认证
// 关闭 csrf
http.csrf().disable();
}

基于角色或权限进行访问控制

  • hasAuthority 方法
    image.png
  • hasAnyAuthority 方法
    如果当前的主体有任何提供的角色(给定的作为一个逗号分隔的字符串列表)的话,返回true
    image.png
    image.png
    image.png

注解使用

image.png

image.png

image.png

image.png

image.png