2012-07-30 89 views
1

我创造了这个简单的AdminController过滤:资源不被春季安全

@Controller 
@RequestMapping("admin") 
public class AdminController { 
    @PreAuthorize("hasAuthority('ROLE_ADMIN')") 
    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public @ResponseBody String welcomeAdmin() { 
     return "Spring Security - ROLE_ADMIN"; 
    } 
    @PreAuthorize("hasAuthority('ROLE_ADMIN')") 
    @RequestMapping(value = "/{query}", method = RequestMethod.GET) 
    public @ResponseBody String welcomeAdmin(@PathVariable String query) { 
     return query; 
    } 
} 

这是安全的context.xml

<http auto-config="true"> 
    <intercept-url pattern="/admin*" access="ROLE_ADMIN"/> 
    <logout logout-success-url="/admin" /> 
</http> 

<authentication-manager> 
    <authentication-provider> 
     <user-service> 
      <user name="user" password="password" authorities="ROLE_USER" /> 
      <user name="admin" password="password" authorities="ROLE_ADMIN" /> 
     </user-service> 
    </authentication-provider> 
</authentication-manager> 

这是这里装入网络。 xml

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/spring/root-context.xml 
     /WEB-INF/spring/appServlet/security-context.xml 
    </param-value> 
</context-param> 
<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

没有错误,但任何人都可以访问/admin资源,为什么资源没有被Spring安全性过滤?

回答

1

你使用的是什么版本的spring security?

安全的context.xml需要

<global-method-security pre-post-annotations="enabled" > 
</global-method-security> 

才能使用的标注。

你也应该尝试:

<intercept-url pattern="/admin*" access="hasRole('ROLE_ADMIN')"/> 
+0

你的解决方案为我工作,但我需要把它放在root-context.xml – xybrek 2012-08-03 11:45:35

3

我认为,这是因为

<logout logout-success-url="/admin" /> 

据该行,一旦用户注销时,该URL将被显示。注销页面不安全,因为它必须可以通过未经身份验证的用户访问。它可能会压倒第一个条件。

+0

我改成<注销注销成功 - URL =“/注销” />但仍然/管理资源进行访问 – xybrek 2012-07-31 02:17:52

+0

是否有您初始化安全性的具体原因“DispatcherServlet”联系人中的上下文?你能不能也请包括配置根应用程序上下文的'web.xml'部分?也许这就是为什么答案没有任何影响。 – nobeh 2012-07-31 02:31:26