springboot+springsecurity+velocity无法显示登录错误信息的问题修复

最近在整合springboot+springsecurity+velocity时,发现的假如登录错误。但是页面上无法显示springsecurity返回的登录错误信息。

通过查看源码发现,它是将错误信息放入了request中。
request.getSession().setAttribute(WebAttributes.AUTHENTICATION_EXCEPTION,exception);

public class SimpleUrlAuthenticationFailureHandler implements
		AuthenticationFailureHandler 
		
	protected final void saveException(HttpServletRequest request,
			AuthenticationException exception) {
		if (forwardToDestination) {
			request.setAttribute(WebAttributes.AUTHENTICATION_EXCEPTION, exception);
		}
		else {
			HttpSession session = request.getSession(false);

			if (session != null || allowSessionCreation) {
				request.getSession().setAttribute(WebAttributes.AUTHENTICATION_EXCEPTION,
						exception);
			}
		}
	}

所以猜测原因有以下三种:最终确认是velocity配置的问题
解决方案:
在application.properties中配置,这样才能从request和session中获取信息

spring.velocity.expose-request-attributes=true
spring.velocity.expose-session-attributes=true

可能的原因1:请求进行了重定向,所以所有的信息都丢失了;解决方案改成请求转发。
可能的原因2:通过eclipse查看,确实request中没有这个错误信息的值。解决方案:我们直接在错误的时候,将错误信息放入session中,在页面上直接显示。
可能的错误3:是否是页面没有经过velocity解析器解析的问题。需要测试查看

velocity测试代码,发现只有testmodel能取到值,也就能明确问题所在

	@RequestMapping("/velocity")
	public String helloVelocity(
			HttpServletRequest request,
			HttpSession session,
			Model model
			){
		request.setAttribute("testrequest", "11111");
		session.setAttribute("testsessiont", "22222");
		model.addAttribute("testmodel", "22222");
		return "testvelocity";
	}
public static final String AUTHENTICATION_EXCEPTION = "SPRING_SECURITY_LAST_EXCEPTION";

但是通过代码查询,request中并没有这个参数,但是奇怪的是,页面上连testrequest=测试往testrequest中放入信息这个参数都没有了。调试是进行了重定向了。
但是session中的值也没有显示出来。

测试如何显示session和request中的值。

猜测应该是我们的页面解析没有其作用。

[null, null, org.springframework.web.context.request.async.WebAsyncManager.WEB_ASYNC_MANAGER=org.springframework.web.context.request.async.WebAsyncManager@22870d3f, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.FILTERED=true, null, null, null, null, null, org.springframework.security.web.header.HeaderWriterFilter@691500ab.FILTERED=true, characterEncodingFilter.FILTERED=true, null, null, null, null, null, null, null, testrequest=测试往testrequest中放入信息, null, null, null, null, null, null, null, null, null, null, null, null, null]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值