我有 Spring MVC + Spring Security 项目。
<http auto-config="true" access-denied-page="/security/accessDenied" use-expressions="true" disable-url-rewriting="true">
...
<intercept-url pattern="/dashboard/myaccount/**" access="hasAnyRole('ROLE_PERSON', 'ROLE_DEALER')"/>
...
<form-login login-page="/security/login" authentication-failure-url="/security/login?error=true"
default-target-url="/security/success" username-parameter="email"
password-parameter="secret"/>
<logout invalidate-session="true" logout-success-url="/index" logout-url="/security/logout"/>
如果用户进入登录页面,如果成功将被重定向到“/security/success”,在那里我使用 session 对象在 Controller 中做更多的事情(记录用户 ID,...等)
我的问题是,当一个 GUEST 用户访问/dashboard/myaccount(需要 AUTH)时,他被重定向到 LOGIN 页面(我不希望这样,我更喜欢抛出 404)。之后 Spring Security 不会重定向到/security/success。而是重定向到/dashboard/myaccount。
如果 GUEST 尝试访问 AUTH 页面,我希望找到一种方法来完全禁用此重定向到登录页面。
有什么办法吗?
Tnx
最佳答案
我们添加一个新的 authenticationEntryPoint:
<http auto-config="true" access-denied-page="/security/accessDenied" use-expressions="true"
disable-url-rewriting="true" entry-point-ref="authenticationEntryPoint"/>
<beans:bean id="authenticationEntryPoint" class="a.b.c..AuthenticationEntryPoint">
<beans:constructor-arg name="loginUrl" value="/security/login"/>
</beans:bean>
public class AuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint {
public AuthenticationEntryPoint(String loginUrl) {
super(loginUrl);
}
@Override
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
response.sendError(403, "Forbidden");
}
}
关于java - 防止重定向到 Spring Security 的登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15847932/