アプリのページにアクセスするための次のルールがあります。
<http auto-config="true" use-expressions="true">
<!-- NON AUTHENTICATION PAGES -->
<intercept-url pattern="/" access="permitAll" />
<intercept-url pattern="/about" access="permitAll" />
<!-- LOGIN FILTER -->
<intercept-url pattern="/login" access="!isAuthenticated()" />
<intercept-url pattern="/j_spring_security_check" access="!isAuthenticated()" />
<intercept-url pattern="/logout" access="!isAuthenticated()" />
<!-- RESOURCES AND OTHER URLs FILTER -->
<intercept-url pattern="/resources/**" access="permitAll" />
<intercept-url pattern="/**" access="isAuthenticated()" />
<!-- FORM LOGIN -->
<form-login login-page="/login" default-target-url="/upload" authentication-failure-url="/loginfailed" />
<logout logout-success-url="/logout" />
</http>
そして、アクセスが失敗したときにいくつかのURL(/ access-deniedなど)にリダイレクトし、コントローラーでこのイベントを処理する必要があります。
@RequestMapping(value = "/access-denied", method = RequestMethod.GET)
public String accessDenied(Model model, RedirectAttributes ra) {
// do what I want
return "redirect:login";
}
たとえば、ユーザーが /upload と入力すると、ログインしていないため、/access-denied にリダイレクトされます。