2015-02-05 251 views
0

我試圖通過讓Spring的攔截器獲得對RestAPI的授權(HandlerInterceptorAdapter)PreHandle方法檢查用戶是否處於所需角色,然後在範圍命中請求的動作控制器。但是,這要求我爲每個操作(URL路徑)提供所需角色的ID。這是我的當前設置:向Spring MVC攔截器添加參數

public class AuthorizationInterceptor extends HandlerInterceptorAdapter{ 

@Autowired 
IUserService us; 

    //before the actual handler will be executed 
    public boolean preHandle(HttpServletRequest request, 
      HttpServletResponse response, Object handler, Integer roleId) 
     throws Exception { 

     String userId = request.getHeader("UserId"); 

     if(!us.isUserInRole(Long.parseLong(userId), roleId)) 
      return false; 

     return true; 


    } 

} 

和(的部分)的servlet-context.xml中:

<interceptors> 
    <interceptor> 
     <mapping path="/" /> 
     <mapping path="https://stackoverflow.com/users/**" /> 
     <beans:bean class="com.lumi.api.interceptors.AuthorizationInterceptor"></beans:bean> 
    </interceptor> 
</interceptors> 

我的問題是,我閹可在參數角色ID與傳遞servlet-context配置中的bean。我似乎無法在文檔中找到任何內容。我想我曾經看到類似的東西:

<mapping path="/" /> 
<parameter name="something" value="some value"> 

但我不確定。

回答

1

您可以使用標準彈簧sintax只需設置一個屬性,一個例子當然

<beans:bean class="com.lumi.api.interceptors.AuthorizationInterceptor"> 
    <beans:property name="roleId" value="REGISTERED_USER"/> 
</beans:bean> 

你的攔截器應包括財產,於是乾脆

public class AuthorizationInterceptor extends HandlerInterceptorAdapter{ 

    private String roleId; 

    public String getRoleId() { 
     return roleId; 
    } 

    public void setRoleId(String roleId) { 
     this.roleId = roleId; 
    } 

    // The rest of your code 
} 
+0

完美。那正是我需要的。謝謝! – MichaelCleverly 2015-02-05 13:53:24