1

我正在我的所有控制器上配置 Spring Security。我希望仅在“我的系统已启用”时才开始执行某些方法。可以通过特定的静态方法从所有控制器访问此信息(我可以将其设为非静态)。我的观点是,我想避免在每个方法的开头对 java 代码进行显式检查。我怎样才能通过 Spring Security 到达那里?

4

2 回答 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 回答