SpringSecurity(安全框架)用户认证和授权

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: SpringSecurity(安全框架)用户认证和授权

以下为源码部分,通过源码学习

   @EnableWebSecurity 
     public class FormLoginSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
     protected void configure(HttpSecurity http) throws Exception {
           http.authorizeRequests().antMatchers("/**").hasRole("USER").and().formLogin()
   *        .usernameParameter("username") // default is username
   *        .passwordParameter("password") // default is password
   *        .loginPage("/authentication/login") // default is /login with an HTTP get
   *        .failureUrl("/authentication/login?failed") // default is /login?error
   *        .loginProcessingUrl("/authentication/login/process"); // default is /login
   *                                    // with an HTTP
   *                                    // post
      }
   @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
          auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
  }
}


1.权限(为某些文件设置权限)

    //链式编程
    //授权
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 首页所有人都可以访问,功能也只有对应有权限的人才能访问到
        // 请求授权的规则
        http.authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/level1/**").hasRole("vip1")
                .antMatchers("/level2/**").hasRole("vip2")
                .antMatchers("/level3/**").hasRole("vip3");
        // 没有被权限默允许的用户会跳到登录页面
        // /login页面
        http.formLogin()
                .usernameParameter("username")
                .passwordParameter("password")
                .loginPage("/toLogin")
                .loginProcessingUrl("/login");
        //注销,开启了注销功能,跳到首页
        http.logout().logoutSuccessUrl("/");
        // 防止网站工具:get,post
        http.csrf().disable();//关闭csrf功能,登录失败肯定存在的原因
        //开启记住我功能: cookie,默认保存两周,自定义接收前端的参数
        http.rememberMe().rememberMeParameter("remember");
    }


所设置页面均不可访问,需要通过用户认证并且登录后即可访问

2.认证(认证的用户才有资格登录系统)

    // 认证,springboot 2.1.x 可以直接使用,用户认证,认证后的用户可以登录系统
    // 密码编码: PasswordEncoder    加密     new BCryptPasswordEncoder()即为设置加密
    // 在spring Secutiry 5.0+ 新增了很多加密方法
    //    and()作为连接使用
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //这些数据正常应该中数据库中读
        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
                .withUser("whx").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");
    }

通过用户认证确定什么用户可以访问什么页面

首先让配置文件继承 WebSecurityConfigurerAdapter,然后通过@@EnableWebSecurity 开启WebSecurity模式。然后通过自动构造方法找到所需方法。

完整配置文件如下:

package nuc.ss.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;
// AOP:拦截器
@EnableWebSecurity  // 开启WebSecurity模式
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    //链式编程
    //授权
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 首页所有人都可以访问,功能也只有对应有权限的人才能访问到
        // 请求授权的规则
        http.authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/level1/**").hasRole("vip1")
                .antMatchers("/level2/**").hasRole("vip2")
                .antMatchers("/level3/**").hasRole("vip3");
        // 没有被权限默允许的用户会跳到登录页面
        // /login页面
        http.formLogin()
                .usernameParameter("username")
                .passwordParameter("password")
                .loginPage("/toLogin")
                .loginProcessingUrl("/login");
        //注销,开启了注销功能,跳到首页
        http.logout().logoutSuccessUrl("/");
        // 防止网站工具:get,post
        http.csrf().disable();//关闭csrf功能,登录失败肯定存在的原因
        //开启记住我功能: cookie,默认保存两周,自定义接收前端的参数
        http.rememberMe().rememberMeParameter("remember");
    }
    // 认证,springboot 2.1.x 可以直接使用,用户认证,认证后的用户可以登录系统
    // 密码编码: PasswordEncoder    加密     new BCryptPasswordEncoder()即为设置加密
    // 在spring Secutiry 5.0+ 新增了很多加密方法
    //    and()作为连接使用
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //这些数据正常应该中数据库中读
        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
                .withUser("whx").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");
    }
}

用户认证如果需要从数据库中取数据的话则将用户认证的代码通过数据库的方式写入;20210720092342509.png

相关文章
|
6月前
|
数据库
shiro认证和授权
shiro认证和授权
57 3
|
6月前
|
安全 Java API
深度解析 Spring Security:身份验证、授权、OAuth2 和 JWT 身份验证的完整指南
Spring Security 是一个用于保护基于 Java 的应用程序的框架。它是一个功能强大且高度可定制的身份验证和访问控制框架,可以轻松地集成到各种应用程序中,包括 Web 应用程序和 RESTful Web 服务。 Spring Security 提供了全面的安全解决方案,用于身份验证和授权,并且可以用于在 Web 和方法级别上保护应用程序。
855 0
|
6月前
|
Java 数据安全/隐私保护
Shiro - 授权那些事
Shiro - 授权那些事
55 0
|
JSON 前端开发 数据格式
六.SpringSecurity基础-认证授权结果处理
SpringSecurity基础-认证授权结果处理
|
JSON 前端开发 数据格式
SpringSecurity基础-认证授权结果处理
在传统的应用中,认证成功后页面需要跳转到认证成功页面或者跳转到个人中心页,但是在前后端分离的项目通常是使用Ajax请求完成认证,这时候我们需要返回一个JSON结果告知前端认证结果,然后前端自行跳转页面。 要做到上述功能,我们需要自定义认证成功处理器实现AuthenticationSuccessHandler接口复写 onAuthenticationSuccess方法,该方法其中一个参数是Authentication ,他里面封装了认证信息,用户信息UserDetails等,我们需要在这个方法中使用Response写出json数据即可
139 0
|
安全 前端开发 Java
Spring Security5+ 用户认证、授权及注销
Spring Security5+ 用户认证、授权及注销
286 0
|
移动开发 安全 前端开发
SpringSecurity认证和授权
目前,我们的测试环境,是谁都可以访问的,我们使用 Spring Security 增加上认证和授权的功能
SpringSecurity认证和授权
|
JSON 算法 安全
【SpringBoot技术指南】「权限校验专区」Shiro整合JWT授权和认证实现
【SpringBoot技术指南】「权限校验专区」Shiro整合JWT授权和认证实现
320 0
|
安全 Java 数据库连接
【Shiro】1、Shiro实现登录授权认证功能(上)
之前在 SSM 项目中使用过 shiro,发现 shiro 的权限管理做的真不错,但是在 SSM 项目中的配置太繁杂了,于是这次在 SpringBoot 中使用了 shiro,下面一起看看吧
315 0
|
Java 数据安全/隐私保护
【Shiro】1、Shiro实现登录授权认证功能(中)
之前在 SSM 项目中使用过 shiro,发现 shiro 的权限管理做的真不错,但是在 SSM 项目中的配置太繁杂了,于是这次在 SpringBoot 中使用了 shiro,下面一起看看吧
134 0