我正在使用的Web應用程序使用Spring Security。我對其進行了配置,以便未授權的請求由其中一個控制器處理(使用access-denied-handler
)。但是,當有人在登錄之前嘗試訪問一個頁面時,他發現自己在登錄頁面而沒有通過控制器。我想讓這個案例由上面提到的同一個控制器來處理。如何防止未經身份驗證的用戶在Spring Security中重定向登錄頁面?
已有similar question其中REST API請求由控制器處理,其餘請求被重定向到登錄頁面。這是使用兩個入口點實現的。我想要的是一個cotroller處理所有未經授權的/未經身份驗證的請求,無論是服務調用還是靜態頁面。所以,我不需要兩種不同的機制。我是否還需要配置入口點?我想應該有一個更簡單的方法來做到這一點。
這裏是我的安全配置大致是這樣的:
<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>