私が取り組んでいるWebアプリケーションはSpring Securityを使用しています。私は、許可されていない要求がコントローラの1つ(access-denied-handler
を使用して)によって処理されるように設定しました。しかし、誰かがログインする前にページにアクセスしようとすると、彼はコントローラを通過することなくログインページで自分自身を見つけます。私は、このケースを上記のコントローラと同じコントローラで処理する必要があります。Spring Securityで認証されていないユーザーをログインページにリダイレクトしないようにするにはどうすればよいですか?
similar questionがあります。ここでは、REST API要求はコントローラによって処理され、残りの要求はログインページにリダイレクトされます。これは2つのエントリーポイントを使用して達成されました。私が望むのは、サービス呼び出しや静的ページなど、すべての不正な/認証されていない要求を1つのコントローラが処理することです。したがって、私は2つの異なるメカニズムを必要としません。まだエントリポイントを設定する必要はありますか?私はこれを行う簡単な方法があるはずです。
<http use-expressions="true" pattern="/**" authentication-manager-ref="operatorAuthenticationManager">
<access-denied-handler error-page="/denied" />
<intercept-url pattern="/order/**" access="hasAnyAuthority('ROLE_ADMIN','ROLE_OPERATOR')"/>
<intercept-url pattern="/client/**" access="hasAnyAuthority('ROLE_ADMIN')"/>
<intercept-url pattern="/denied" access="permitAll"/>
<intercept-url pattern="/login" access="permitAll"/>
<intercept-url pattern="/login.jsp" access="permitAll"/>
...
<intercept-url pattern="/**" access="hasAnyAuthority('ROLE_ADMIN','ROLE_OPERATOR')"/>
<form-login login-page="/login" default-target-url="/" always-use-default-target="true"
authentication-success-handler-ref="operatorAuthenticationSuccessHandler" authentication-failure-url="/login?error"/>
<logout logout-success-url="/login"/>
</http>