我有一个方法可以处理URI为“/ home”的请求。该请求在成功登录时生成。这里是一个小的代码来支持我的情况:Spring MVC奇怪的行为
<security:form-login login-processing-url="/static/j_spring_security_check"
login-page="/login" authentication-failure-url="/login?login_error=t"
default-target-url="/home"/>
该方法的主体演示了什么,我试图实现:
String userMail = SecurityContextHolder.getContext().
getAuthentication().getName();
logger.info(userMail);
Person p = userService.retrieveUserByEmail(userMail);
session.setAttribute("person", p);
return "user/home";
这一点很重要,因为人p被用作其他数据源要求。
现在的问题。我不知道它是否属于Google Chrome浏览器,但由于某些原因,浏览器会记住您在登录前完成的请求,而不是在成功登录过程后通过/ home请求,它会生成以前请求绕过这个/ home门,导致空指针异常,因为从未设置过p,因为会话没有被/ home请求填充。
我知道对于其他请求我应该进行验证,但我不喜欢让用户在没有事先通过/ home的情况下生成任何请求的想法。
完成与文字说明,现在解释我是如何得到的步骤不必要的行为:
索要请求,你知道存在诸如: 对myApp/nameOfSomething/viewThisSomething - 你被带到对数(您必须通过身份验证才能接受请求)
您输入正确的凭据,而不是转到default-target-url =“/ home” 您正在自动进行以前的请求myApp/nameOfSomething/viewThisSomething没有填充sessio n与必要的数据并导致空指针异常。
还有什么有趣的是,记录显示邮件,所以它可能是,他们都在同一时间执行,但/家的要求是比较慢 - 可以发生的呢?
我通过检查null和强制返回到/ home的方式解决了其他方法中的情况,这种方式按预期工作,但我是控制怪胎,不喜欢用户在做他不打算做的事情。
谢谢你的时间,
哦,我在做自定义方面很糟糕,但不管怎么样,谢谢我会研究它。 – Aubergine 2012-01-18 19:07:02