你問:
但這種做法我們應該觸及很多文件,有沒有處理這種情況的任何最佳 方式。
從Spring MVC的HandlerInterceptor
javadoc:
「應用程序可以註冊任意數量的現有或定製 攔截器處理的某些羣體,添加共同 預處理的行爲,而無需修改每個處理程序 實施「
你可以做什麼:
- 編寫自定義
HandlerInterceptor
應當擴大 HandlerInterceptorAdapter
。
- 重寫
boolean preHandle()
方法。該方法在調用處理程序之前被調用。所以你可以檢查登錄用戶的訪問權限(可能來自會話)。您可以在此方法中編寫自定義響應。
- 在您的
dispatcher-servlet.xml
中註冊攔截器。
例如:
public class AuthInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
String uri = request.getRequestURI();
User user = (User) request.getSession().getAttribute("foo"); //for example
if (...) { //check access to this uri, if access fails
response.sendRedirect("/to/some/url");
return false;
}
return true;
}
}
並註冊該HandlerInterceptor
到dispatcher-servlet.xml
:
<mvc:interceptors>
<bean class="your.package.AuthInterceptor"/>
</mvc:interceptors>
可以配置此攔截器更加URL特定的。見Spring Reference和Spring javadoc。