java - 防止重定向到 Spring Security 的登录

标签 java spring security redirect spring-mvc

我有 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/

相关文章:

macos - Swift 中的 Cocoa 授权

Java,堆叠类

java - Struts 标签中的 JSTL

java - 如何在 url 请求中发送数组

spring - 如何使用 spring 缓 stub 据主键缓存整体列表

api - 通过 angularJs 和 $http.get 将凭据传递给服务堆栈 rest api

java - Android - 以编程方式在 EditText 内居中文本

java - Collections.binarySearch(List list, K key) 说明。 java

Java无法发送https请求 "unable to find valid certification path"

javascript - 保护 HTTP 流量不被嗅探