关于SpringSecurity配置中的一些问题解决(登录页面不跳转,报错302)

1.为何在自定义的登录页面中登录完页面不跳转?

主要是SpringSecurity在校验csrf跨域时候,会传一个csrf相关的随机token值!

在SpringSecurity 4 之后,其csrf默认是开启的,在配置中将其关闭就可以解决。

这行代码写在webSecurityConfig方法中最上边。(写在最后自测也可以)

当然关闭csrf是不可取的,因为这样就会面临csrf的攻击。

以下还有三种解决办法(查了好久,都不能用,最终还是看的spring实战这本书知道了为啥。272页9.4认证用户)

(1).采用官方提供的登陆模板,因为人家这里抽象服务器传递了csrf相关的token值

(2).采用freemark模板(官方建议)或者themeleaf模板(官方建议),那么在form表单的跳转路径就携程下图的格式:th:action="@{/login...}"

(3).采用jsp模板,并且加上一行代码

不过切记这个重写的表单页面必须用jsp模板!!!!!!!不然是不会有用的

当然现在spring框架不建议使用jsp模板

2.formLogin表单登录的配置

其中loginPage()中的路径就是自定义的登录页面

后面的loginProcessingUrl("/login/form")中的"/login/form"是自定义登陆页面中的表单提交action

(注意这个实在jsp模板下的代码!!!!)

这两处需要保持一致

为什么需要配置这个呢?

因为在自定义的登陆页面中,表单进行提交用户输入的用户名与密码,这个请求实在SpringSecurity中是由UsernamePasswordAuthenticationFilter过滤器来处理的,看他的源码

它处理的路径为login的post请求,而我们自定义的表单登录页面提交路径改变了,这里就需要将这个改变告诉给SpringSecurity,这样做的好处是就不需要重写一个Controller来处理了。当然处理验证用户名密码的操作代码还需要我们自己来写

下边截图只是简单的一个demo

3.默认的用户在进行登录验证前是哪个页面,验证成功后会将继续操作。但是如果想让验证成功后跳转到指定的页面,则需要这两个方法

两者选其一就行

但是需要注意的是successForwardUrl(),路径不能为"/",不能为空,因为

而且请求必须是post请求!!!

而defaultSuccessUrl(),设置跳转路径后需要加true,不然默认是false,不会生效!

 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值