我正在我的所有控制器上配置 Spring Security。我希望仅在“我的系统已启用”时才开始执行某些方法。可以通过特定的静态方法从所有控制器访问此信息(我可以将其设为非静态)。我的观点是,我想避免在每个方法的开头对 java 代码进行显式检查。我怎样才能通过 Spring Security 到达那里?
问问题
954 次
2 回答
1
一种方法是使用处理程序拦截器。
这是一般的想法:
(1)配置要阻止的 url 模式:
<util:list id="sysEnableCheckUrlPatterns" value-type="java.lang.String">
<beans:value>/module1/**</beans:value>
<beans:value>/module2/**</beans:value>
</util:list>
(2)编写拦截器:
public class SysEnableCheckInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
/*
If system enabled then return true. Otherwise return false (and optionally write something in response)
*/
}
}
(3)配置那个拦截器。在 3.1 中,您可以执行以下操作:
@Configuration
public class AppConfig extends WebMvcConfigurerAdapter {
@Resource(name="sysEnableCheckUrlPatterns")
/* or use @Autowired or @Inject if you like */
private String[] sysEnableCheckUrlPatterns;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SysEnableCheckInterceptor()).addPathPatterns(sysEnableCheckUrlPatterns);
}
}
于 2013-03-20T17:14:39.233 回答
0
您可以在安全注释中使用 SPEL(Spring 表达式语言)。
见http://static.springsource.org/spring-security/site/docs/3.0.x/reference/el-access.html
于 2013-03-20T03:14:07.947 回答