1
我春天的安全配置:Spring Security沒有拋出任何異常
<security:http auto-config="true" use-expressions="true" >
<security:intercept-url pattern="/game/**" access="isAuthenticated()"/>
<security:intercept-url pattern="/**" access="permitAll"/>
<security:form-login password-parameter="password" username-parameter="username" login-page="/"
default-target-url="/game/" login-processing-url="/processLogin" authentication-failure-url="/"/>
<security:logout logout-url="/game/logout" logout-success-url="/" delete-cookies="true" invalidate-session="true"/>
<security:access-denied-handler ref="accessDeniedHandler" />
</security:http>
自定義處理:
@Component
public class AccessDeniedHandler extends AccessDeniedHandlerImpl {
@Override
public void handle(HttpServletRequest request,
HttpServletResponse response, AccessDeniedException exception)
throws IOException, ServletException {
super.handle(request, response, exception);
}
}
異常解析器:
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key=".AccessDeniedException">accessDenied</prop>
</props>
</property>
</bean>
我的問題是Spring Security不會拋出任何例外。例如,當我輸入受保護的網址時,它會將我重定向到登錄頁面。如果我從配置中刪除登錄頁面,它會將我重定向到彈簧安全默認登錄表單。正因爲如此,我無法處理任何異常,如AccessDeniedException。正如你上面看到的,我已經定義了自定義訪問被拒絕的處理程序,它重寫了處理方法,但它甚至沒有進入它。我也嘗試過使用SimpleMappingExceptionResolver,但那也行不通。 所以我的問題是:如何使彈簧安全性拋出異常,以便我可以通過解析器或自定義處理程序捕獲它們?
'AccessDeniedHandler'僅適用於已通過身份驗證的用戶。也許如果你更詳細地解釋你想要達到的目標。爲什麼你不希望Spring Security對用戶進行身份驗證? – 2014-10-27 15:38:42
嗨盧克,感謝您的信息。不知道它只適用於已通過身份驗證的用戶。我試圖做的只是顯示我的錯誤頁面,當未經身份驗證的用戶試圖訪問的東西只有身份驗證的用戶,但沒有映射到任何網址,以便用戶不能手動輸入/拒絕例如。 – Sikor 2014-10-27 15:47:41
從您的問題中不清楚用戶是如何進行身份驗證的,或者您訪問網站時爲什麼不希望他們成爲用戶。如果你想覆蓋認證過程來拒絕訪問,你可以使用一個自定義的'AuthenticationEntryPoint'。默認開啓將重定向到登錄頁面。也不要使用'auto-config'。無論您是否配置它,它都會創建登錄設置。只要刪除它。 – 2014-10-27 15:53:19