2011-05-21 48 views
2

如果您想根據用戶訪問一個或多個URL來顯示JSP頁面中的內容,可以根據用戶訪問的一個URL輕鬆完成:如何根據用戶訪問URL來顯示JSP內容使用Spring Security

<sec:authorize url="/someurl"> 
    <!-- show content, if someurl is accessible --> 
</sec:authorize> 

然而,有時可能來得心應手基於用戶訪問的URL一些布爾表達式來顯示內容,像(不正確):

<sec:authorize url="!'/someurl'"> 
    <!-- show content, if someurl is inaccessible --> 
</sec:authorize> 

<sec:authorize url="'/someurl1' and '/someurl2'"> 
    <!-- show content, if someurl1 and someurl2 are accessible --> 
</sec:authorize> 

到目前爲止,我想出了使用Spring EL建設有一個自定義類的靜態方法的骯髒的解決方案:

<sec:authorize access="!T(my.package.MyClass).isAccessibleToUser('/someurl')"> 
    <!-- show content, if someurl is inaccessible --> 
</sec:authorize> 

有一些更優雅的方式來實現這一目標?

回答

1

我只是把這個邏輯放在與頁面關聯的控制器中,而不是將它全部放在前端,或者如果你使用Spring MVC,更好的解決方案是創建一個RequestInterceptor類。

public class RequestInterceptor extends HandlerInterceptorAdapter { 
    @Override 
     public void postHandle(
      HttpServletRequest request, 
      HttpServletResponse response, 
      Object handler, 
      ModelAndView modelAndView) throws Exception { 

      // logic here that checks if the user can see something 
      modelAndView.addObject("canUserSeeSection", abooleanvalue); 

      super.postHandle(request, response, handler, modelAndView); 
     } 
    } 
} 

,然後在前端如果使用的

<c:if test="${canUserSeeSection}" ... 

同樣的想法的代碼也應爲SpringSecurity標籤工作,你可以逃脫標準的JSP。

相關問題