2013-03-20 95 views
1

我在所有控制器上配置Spring Security。 我希望某些方法执行只在“我的系统已启用”时启动。这些信息可以通过一个特定的静态方法从所有的控制器访问(我可以使它非静态)。 我的观点是,我想避免在每个方法开始时对java代码进行显式检查。 如何通过Spring Security来到那里?Spring安全性 - 基于属性访问控制器方法

+0

如何配置安全acroos所有的控制器?你在每种方法上使用注释吗?或者带有多个'intercpt-url'标签的xml配置? – 2013-03-20 09:01:16

+0

我使用注释 – Manu 2013-03-20 11:53:12

回答

1

一种方法是使用handler interceptor

这是总体思路:

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

    } 

} 
0

您可以在安全注释中使用SPEL(Spring表达式语言)。

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

+0

我需要使用过滤器吗?我可以使用@PreAuthorize并检查其他地方存储的静态变量(不是参数,也不是已注释方法的类)中的布尔值? – Manu 2013-03-20 12:02:51

+0

我相信你可以,但我从来没有尝试过。试一试,让我们知道:-) – GreyBeardedGeek 2013-03-21 03:30:17