springboot security之前后端分离配置方式

 更新时间:2025年03月31日 14:59:01   作者:不识君的荒漠  
这篇文章主要介绍了springboot security之前后端分离配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

前言

spring boot security默认配置有一个登录页面,当采用前后端分离的场景下

需要解决两个问题:

  1. 前端有自己的登录页面,不需要使用spring boot security默认的登录页面
  2. 登录相关接口允许匿名访问

因此需要自定义相关实现。

自定义配置

自定义配置的核心实现如下:

@Component
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 在这里自定义配置
    }
}

如上示例代码:

关键是重写这个方法,spring boot security的扩展方法不只这一种,化繁为简,尽量采用最简单直白的方式。

认证失败自定义处理

当请求认证失败的时候,可以返回一个401的状态码,这样前端页面可以根据响应做相关处理,而不是出现默认的登录页面或者登录表单:

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 在这里自定义配置
        http.authorizeRequests()
                .anyRequest()
                .authenticated()
                .and()
                .exceptionHandling()
                // 认证失败返回401状态码,前端页面可以根据401状态码跳转到登录页面
                .authenticationEntryPoint((request, response, authException) ->
                        response.sendError(HttpStatus.UNAUTHORIZED.value(), HttpStatus.UNAUTHORIZED.getReasonPhrase()))
                .and().cors()
                // csrf是否决定禁用,请自行考量
                .and().csrf().disable()
//                .antMatcher("/**")
                // 采用http 的基本认证.
                .httpBasic();
    }

登录相关接口匿名访问

登录接口或者验证码需要匿名访问,不应该被拦截。

如下,提供获取验证码和登录的接口示例:

@RequestMapping("/login")
@RestController
public class LoginController {

    @PostMapping()
    public Object login() {
        return "login success";
    }

    @GetMapping("/captcha")
    public Object captcha() {
        return "1234";
    }
}

配置允许访问这部分接口:

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 在这里自定义配置
        http.authorizeRequests()
                // 登录相关接口都允许访问
                .antMatchers("/login/**").permitAll()
                // 还有其它接口就这样继续写
                .antMatchers("/other/**").permitAll()
                .anyRequest()
                .authenticated()
				... 省略下面的
    }

前置文章

spring boot security快速使用示例

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot MyBatis保姆级整合教程

    SpringBoot MyBatis保姆级整合教程

    因为Spring Boot框架开发的便利性,所以实现Spring Boot与数据访问层框架(例如MyBatis)的整合非常简单,主要是引入对应的依赖启动器,并进行数据库相关参数设置即可
    2022-06-06
  • RabbitMQ交换机与Springboot整合的简单实现

    RabbitMQ交换机与Springboot整合的简单实现

    这篇文章主要介绍了RabbitMQ交换机与Springboot整合的简单实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • 玩转spring boot 快速开始(1)

    玩转spring boot 快速开始(1)

    玩转spring boot,快速开始spring boot学习,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Spring Boot + Thymeleaf + Activiti 快速开发平台项目 附源码

    Spring Boot + Thymeleaf + Activiti 快速开发平台项目 附源码

    这篇文章主要介绍了Spring Boot + Thymeleaf + Activiti 快速开发平台项目附源码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Java中Collection与Collections的区别详解

    Java中Collection与Collections的区别详解

    这篇文章主要为大家详细介绍了Java中Collection与Collections的区别,文中有详细的代码示例,具有一定的参考价值,感兴趣的同学可以参考一下
    2023-06-06
  • java 实现比较版本号功能

    java 实现比较版本号功能

    本篇文章主要介绍了java 中涉及到客户端的系统经常需要用到比较版本号的功能,并附小示例,希望能帮助需要的小伙伴
    2016-07-07
  • Java反射中java.beans包学习总结

    Java反射中java.beans包学习总结

    本篇文章通过学习Java反射中java.beans包,吧知识点做了总结,并把相关内容做了关联,对此有需要的朋友可以学习参考下。
    2018-02-02
  • Springboot使用influxDB时序数据库的实现

    Springboot使用influxDB时序数据库的实现

    项目中需要存放大量设备日志,且需要对其进行简单的数据分析,信息提取工作,所以本文就介绍一下Springboot使用influxDB时序数据库,感兴趣的可以了解一下
    2021-08-08
  • Java实现基于TCP的通讯程序实例解析

    Java实现基于TCP的通讯程序实例解析

    这篇文章主要介绍了Java实现基于TCP的通讯程序实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java面试题冲刺第六天--网络编程1

    Java面试题冲刺第六天--网络编程1

    这篇文章主要为大家分享了最有价值的三道网络编程面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-07-07

最新评论