# 前后端分离中关于springSecurity使用的坑
1.问题抛出:当前后端未分离的时候,我们经常通过后端同时返回数据和页面给前端,但是当前后端分离的时候,我们只能通过Json数据来进行前后端的交互,例如登录授权过程,下面我来给大家讲一个之前踩过的坑:
2.问题出现:前后端分离的登录过程中,我们可以自定义拓展后端security框架内容实现根据不同的登录情况进行不同的数据响应,例如登录成功后我们通过实现AuthenticationSuccessHandler
接口对成功内容进行返回({"code":200,"msg":"登录成功"})
;登录失败时通过实现AuthenticationFailureHandler
接口进行数据响应;但是有一种情况可能在前后端分离时出现:当我们未登录,直接请求需要授权的资源时将被框架拦截,我们可以通过实现AuthenticationEntryPoint
接口中的commence
方法进行未登录操作的数据响应即可,但是经常有朋友会出现postman调试成功,但是浏览器调试失败,并且返回错误码302,而ajax对302错误无感知,会将请求重定向到登录接口的情况。
3.解决方式:一般错误的配置内容是在WebSecurityConfigurerAdapter配置类中添加如下配置:.httpBasic().authenticationEntryPoint(new AuthenticationEntryPoint())
,此配置在授权失败的时候将出现重定向错误
正确的配置:.exceptionHandling().authenticationEntryPoint(new AuthenticationEntryPoint())
,使用这种配置前后端分离时未登录时将得到后端的响应数据