向 Spring MVC 拦截器添加参数
Adding parameters to Spring MVC Interceptor
我正在尝试通过让 Spring 的拦截器 (HandlerInterceptorAdapter) PreHandle 方法检查用户是否处于所需角色来获得对我的 RestAPI 的授权,在作用域命中控制器中请求的操作之前。但是,这需要我为每个操作(URL 路径)提供它所需的角色 ID。这是我当前的设置:
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="/users/**" />
<beans:bean class="com.lumi.api.interceptors.AuthorizationInterceptor"></beans:bean>
</interceptor>
</interceptors>
我的问题是,我是否可以在 servlet-context 配置中使用 bean 传入参数 roleId。我似乎无法在文档中找到任何内容。我想我曾经看过类似的东西:
<mapping path="/" />
<parameter name="something" value="some value">
但我不确定。
您可以使用标准 spring 语法简单地设置 属性,例如
<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
}
我正在尝试通过让 Spring 的拦截器 (HandlerInterceptorAdapter) PreHandle 方法检查用户是否处于所需角色来获得对我的 RestAPI 的授权,在作用域命中控制器中请求的操作之前。但是,这需要我为每个操作(URL 路径)提供它所需的角色 ID。这是我当前的设置:
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="/users/**" />
<beans:bean class="com.lumi.api.interceptors.AuthorizationInterceptor"></beans:bean>
</interceptor>
</interceptors>
我的问题是,我是否可以在 servlet-context 配置中使用 bean 传入参数 roleId。我似乎无法在文档中找到任何内容。我想我曾经看过类似的东西:
<mapping path="/" />
<parameter name="something" value="some value">
但我不确定。
您可以使用标准 spring 语法简单地设置 属性,例如
<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
}