springmvc shiro UnauthorizedException 異常解決方案

springMVC 整合 shiro 時,配置了當訪問某個URL沒有權限時的配置處理:java

<!-- 經過unauthorizedUrl指定沒有權限操做時跳轉頁面 -->
<property name="unauthorizedUrl" value="/refuse"/>web

可是,上面的配置沒有效果,就是當用戶沒有權限的時候不會運行"/refuse"這個URL路徑,而是直接在頁面顯示出UnauthorizedException錯誤信息。spring

現提供如下幾種解決方案:apache

1. 在控制器上添加 @ExceptionHandler()統一處理某個類異常:mvc

/**
* 訪問某個URL沒有權限時拋出UnauthorizedException,
* @ExceptionHandler({UnauthorizedException.class})註解表示處理:UnauthorizedException 異常,
* 當異常出現時,返回 refuse 視圖。
*/
@ExceptionHandler({UnauthorizedException.class})
public ModelAndView processUnauthenticatedException(NativeWebRequest request, 
                   UnauthorizedException e) {
	 ModelAndView mv = new ModelAndView();
	 mv.addObject("exception", e.getMessage());
	 mv.setViewName("refuse");
	 return mv;
}

  

當在訪問本控制器時,出現UnauthorizedException異常,則統一跳轉到refuse視圖。可是此方案須要在每一個控制器中實現。重複代碼較多。app

2. 在springmvc的配置文件中來統一處理異常方案jsp

<!-- shiro爲集成springMvc 攔截異常 -->
<bean
	class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
	<property name="exceptionMappings">
		<props>
			<!-- 這裏你能夠根據須要定義N多個錯誤異常轉發 -->
			<prop key="org.apache.shiro.authz.UnauthorizedException">refuse</prop>
			<prop key="org.apache.shiro.authz.UnauthenticatedException">refuse</prop>
			<prop key="java.lang.IllegalArgumentException">/error</prop>
			<!-- 參數錯誤(bizError.jsp) -->
			<prop key="java.lang.Exception">/error</prop>
		</props>
	</property>
</bean>

  這樣子的話,就只在SpringMVC配置文件配置一處就能夠了。code

相關文章
相關標籤/搜索