Spring security - 访问基于属性的控制器方法

时间:2013-03-20 02:26:21

标签: spring spring-mvc spring-security

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

2 个答案:

答案 0 :(得分:1)

一种方法是使用handler interceptor

这是一般性的想法:

(1)配置要阻止的网址格式:

<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);

    }

}

答案 1 :(得分:0)

您可以在安全注释中使用SPEL(Spring Expression Language)。

请参阅http://static.springsource.org/spring-security/site/docs/3.0.x/reference/el-access.html