Java Spring MVC奇怪的行为
我有一个处理URI为“/home”的请求的方法。此请求是在成功登录过程后生成的。下面是一个小代码来支持我的情况:Java Spring MVC奇怪的行为,java,spring,model-view-controller,Java,Spring,Model View Controller,我有一个处理URI为“/home”的请求的方法。此请求是在成功登录过程后生成的。下面是一个小代码来支持我的情况: <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"/> 此位很重要,因为pe
<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"/>
此位很重要,因为person p被用作其他请求的数据源
现在问题来了。我不知道这是否是Google Chrome的属性,但出于某种原因,浏览器会记住您在登录前所做的请求,而不是在成功登录后通过/home request,它会绕过此/home gate生成上一个请求,导致空指针异常,因为从未设置person p,由于会话未由/home请求填充
我知道,对于其他请求,我应该进行验证,但我不喜欢让用户在不经过/home之前生成任何请求的想法
完成了文本描述,现在解释我如何在步骤中获得不想要的行为:
谢谢您的时间,这不是一个bug,而是一个特性。登录后让用户去他想去的地方比强迫用户去主页要友好得多。他可以将其中一个受保护的页面加入书签,或者只是浏览一些包含指向受保护页面链接的非受保护页面 发件人: 如果尝试访问受保护的表单时未提示表单登录 资源,则默认的目标url选项开始发挥作用。这是 成功登录后用户将被带到的URL,以及 默认为“/”。您还可以进行配置,以便用户始终 在该页面结束(无论登录是否为“按需登录” 或者他们通过设置 始终将默认目标属性设置为“true” 依我看,你应该保持原样,但是确保登录成功后设置了所需的sesion属性,而不是在主页中设置此属性。这将确保每个受保护的页面都可以访问会话属性,即使用户没有进入主页
通过使用自定义UsernamePasswordAuthenticationFilter子类,您可以轻松地完成此操作,一旦身份验证成功,该子类将在会话中设置适当的属性。哦,我在自定义方面做得太差了,但无论如何,谢谢,我会仔细研究的。
String userMail = SecurityContextHolder.getContext().
getAuthentication().getName();
logger.info(userMail);
Person p = userService.retrieveUserByEmail(userMail);
session.setAttribute("person", p);
return "user/home";