2017-03-09 28 views
0

我們擁有一個具有3個不同用戶角色的應用程序,用戶,作者&管理員。每個訪問角色都有不同的菜單和屏幕。如何處理Spring應用程序中的權限升級

即使菜單項被隱藏,如果我們捕獲管理網址並在用戶登錄中將其過去,它將打開該頁面。網頁上的所有操作都不起作用,但我們仍計劃限制頁面打開。

只有這樣,我才能看到我們可以處理的是在每個操作中寫入一個條件,以在打開頁面之前驗證訪問權限。但是用這種方法,我們應該觸摸很多文件,有沒有最好的方法來處理這種情況。

我們的應用程序是用Spring MVC框架編寫的。

謝謝。

回答

0

你問:

但這種做法我們應該觸及很多文件,有沒有處理這種情況的任何最佳 方式。

從Spring MVC的HandlerInterceptorjavadoc

「應用程序可以註冊任意數量的現有或定製 攔截器處理的某些羣體,添加共同 預處理的行爲,而無需修改每個處理程序 實施

你可以做什麼:

  • 編寫自定義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; 
    } 
} 

並註冊該HandlerInterceptordispatcher-servlet.xml

<mvc:interceptors> 
    <bean class="your.package.AuthInterceptor"/> 
</mvc:interceptors> 

可以配置此攔截器更加URL特定的。見Spring ReferenceSpring javadoc