Spring security认证流程

Spring Security 认证流程大致如下:

  1. 用户提交登录表单,请求发送至 /login 路径。
  2. Spring Security 处理 /login 路径,通过配置的 AuthenticationEntryPoint (默认是 LoginUrlAuthenticationEntryPoint)重定向到登录页面。
  3. 用户输入凭证并提交,请求发送至 /login 路径。
  4. Spring Security 通过配置的 AuthenticationManager 处理认证请求。
  5. AuthenticationManager 通过 ProviderManager 查询相应的 AuthenticationProvider 来验证凭证。
  6. AuthenticationProvider 会进一步委托 UserDetailsService 查询用户详情(包括权限等信息)。
  7. 如果认证成功,AuthenticationProvider 会生成一个包含用户详情的 Authentication 对象。
  8. ProviderManager 返回成功认证的 Authentication 对象给 AuthenticationManager
  9. AuthenticationManager 处理完毕后,通过配置的 AuthenticationSuccessHandler 处理登录成功。
  10. 如果认证失败,AuthenticationManager 通过配置的 AuthenticationFailureHandler 处理登录失败。

以下是一个简单的 Spring Security 配置示例,演示如何自定义登录流程:




@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
    @Autowired
    private CustomAuthenticationSuccessHandler customAuthenticationSuccessHandler;
 
    @Autowired
    private CustomAuthenticationFailureHandler customAuthenticationFailureHandler;
 
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
            .withUser("user").password("{noop}user").authorities("ROLE_USER");
    }
 
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .successHandler(customAuthenticationSuccessHandler)
                .failureHandler(customAuthenticationFailureHandler);
    }
}
 
public class CustomAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
        // 登录成功后的操作
    }
}
 
public class CustomAuthenticationFailureHandler implements AuthenticationFailureHandler {
    @Override
    public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
        // 登录失败后的操作
    }
}

在这个配置中,我们定义了一个 \`CustomAuthent

最后修改于:2024年09月04日 12:51

评论已关闭

推荐阅读

Vue中使用mind-map实现在线思维导图
2024年08月04日
VUE
Web前端最全Vue实现免密登录跳转的方式_vue怎么样不登录返回首页,最强技术实现
2024年08月04日
VUE
vue3 项目搭建教程(基于create-vue,vite,Vite + Vue)
2024年08月04日
VUE
Vue-颜色选择器实现方案——>Vue-Color( 实战*1+ Demo*7)
2024年08月04日
VUE
Vue项目卡顿慢加载?这些优化技巧告诉你!_vue数据多渲染卡顿
2024年08月04日
VUE
vue中的keep-alive详解与应用场景
2024年08月04日
VUE
Vue、React实现excel导出功能(三种实现方式保姆级讲解)
2024年08月04日
vue-office/docx插件实现docx文件预览
2024年08月04日
VUE
java调用js文件的两种方法(支持V8引擎)
2024年08月04日
JavaScript:解决计算精度问题/mathjs/bignumber.js/big.js/decimal.js
2024年08月04日
两周从爬虫小白变大神 _yjs_js_security_passport
2024年08月04日
JS笔记(对象、函数、数组)
2024年08月04日
Markdown.js:强大的纯JavaScript Markdown解析器
2024年08月04日
Vue项目:js模拟点击a标签下载文件并重命名,URL文件地址下载方法、请求接口下载文件方法总结。
2024年08月04日
vue 父组件怎么获取子组件里面的data数据
2024年08月04日
VUE
个人开发实现AI套壳网站快速搭建(Vue+elementUI+SpringBoot)
2024年08月04日
el-table 表格封装并改造实现单元格可编辑
2024年08月04日
none
nodejs环境下创建vue项目、SSH密钥登陆!!!
2024年08月04日
vue+quill+element-ui实现视频、图片上传及缩放保姆级教程,轻松使用富文本
2024年08月04日
【three.js】22. Imported Models导入模型
2024年08月04日