18

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」にリダイレクトされ、そこでセッションオブジェクトを使用してコントローラーでさらに多くのことを行います(ユーザーIDの記録など)

私の問題は、GUEST ユーザーが /dashboard/myaccount (AUTH が必要) にアクセスしようとすると、ログイン ページにリダイレクトされることです (これは望ましくありません。404 がスローされることを好みます)。その後、Spring Security は /security/success にリダイレクトされません。代わりに、/dashboard/myaccount にリダイレクトされます。

GUEST が AUTH ページにアクセスしようとした場合に備えて、このログイン ページへのリダイレクトを完全に無効にする方法を見つけたいと思います。

これを行う方法はありますか?

TNX

4

3 に答える 3

14

新しい 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");
    }
}
于 2013-04-08T09:25:58.140 に答える
5

これを見つけました: always-use-default-target="true"

このように、ログイン後にコントローラー関数が常に呼び出されます。

于 2013-04-06T06:49:58.263 に答える