今天小编给大家分享一下SpringSecurity怎么实现前后端分离的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前后端分离模式是指由前端控制页面路由,后端接口也不再返回html数据,而是直接返回业务数据,数据一般是JSON格式。Spring Security默认支持的表单认证方式,会存在两个问题:表单的HTTP Content-Type是applica免费云主机域名tion/x-www-form-urlencoded,不是JSON格式。Spring Security会在用户未登录或登录成功时会发起页面重定向,重定向到登录页或登录成功页面。要支持前后端分离的模式,我们要对这些问题进行改造。Spring Security默认提供账号密码认证方式,具体实现是在UsernamePasswordAuthenticationFilter类中。因为是表单提交,所以Filter中用request.getParameter(this.usernameParameter) 来获取用户账号和密码信息。当我们将请求类型改成application/json后,getParameter方法就获取不到信息。要解决这个问题,就要新建一个Filter来替换UsernamePasswordAuthenticationFilter ,然后重新实现获取用户的方法。注册Filter有两种方式,一给是直接调用httpSecurity的addFilterAt(Filter filter, Class extends Filter> atFilter) ,另一个是通过AbstractHttpConfigurer 来注册。因为我们继承了原来的账密认证方式,考虑到兼容原有逻辑,我们选择Spring Security默认的Configurer注册方式来注册Filter。AbstractHttpConfigurer 在初始化 UsernamePasswordAuthenticationFilter 的时候,会额外设置一些信息。新建一个JsonUsernamePasswordLoginConfigurer直接继承AbstractAuthenticationFilterConfigurer。这一步比较简单,我们先关闭原来的表单认证,然后注册我们自己的Configurer,实现JSON版认证方式。经过这三步,Spring Security就能识别JSON格式的用户信息了。有几个场景会触发Spring Security的重定向:当前用户未登录,重定向到登录页面登录验证成功,重定向到默认页面退出登录成功,重定向到默认页面我们要对这几个场景分别处理,给前端返回JSON格式的描述信息,而不是发起重定向。用户发起未登录的请求会被AuthorizationFilter拦截,并抛出AccessDeniedException异常。异常被AuthenticationEntryPoint处理,默认会触发重定向到登录页。Spring Security开放了配置,允许我们自定义AuthenticationEntryPoint。那么我们就通过自定义AuthenticationEntryPoint来取消重定向行为,将接口改为返回JSON信息。登录成功或失败后的行为由AuthenticationSuccessHandler 和AuthenticationFailureHandler 来控制。原来是在**formLogin(it->it.successHandler(null))**
里配置它们,由于上面我们自定义了JsonUsernamePasswordLoginConfigurer ,所以要在我们自己的Configurer 上配置AuthenticationSuccessHandler 和AuthenticationFailureHandler 。退出登录是在LogoutConfigurer配置,退出成功后,会触发LogoutSuccessHandler操作,我们也重写它的处理逻辑。前后端分离后,如果页面是放在CDN上,那么前段直至发起登录请求之前,都没机会从后端拿到CSRF Token。所以,登录请求会被Spring Security的CsrfFilter拦截。要避免这种情况,一种方式是发起登录请求前,先调用接口获取CSRF Token;另一种方式是先关闭登录接口的CSRF校验。方式二配置如下:以上就是“SpringSecurity怎么实现前后端分离”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注百云主机行业资讯频道。
这篇文章主要介绍“python中h5py开源库怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python中h5py开源库怎么使用”文章能帮助大家解决问题。h6py简单介绍一个HDF5文件是一种存放两类对象的容器…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。