PreAuthorize注释不适用于球衣

时间:2014-04-11 15:10:17

标签: java spring-security annotations jersey-2.0

我正在尝试使用弹簧安全注释来保证球衣服务而没有任何运气。

我已将此部分添加到web.xml:

<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.test.proj.ui.web.rest;com.fasterxml.jackson.jaxrs</param-value>
    </init-param>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.test.commons.ui.web.jersey.RestApplication</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

还在applicationContext:

上启用了使用此功能的预注释
<global-method-security secured-annotations="enabled" pre-post-annotations="enabled" />

这是我的服务类:

@Component
@Path("/user/{uid: .*}")
public class UserResource {
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @PreAuthorize("hasRole('ROLE_MANAGE_USER')")
    public Response getUserDetail(@PathParam("uid") String uid) {
        return "Hi, this is a test";
    }
}

Spring安全性在身份验证中运行良好,但授权不能按预期工作,并且忽略PreAuthorize注释而没有任何错误或日志。

我正在使用Spring 3.2.4和Spring Security 3.2.1以及Jersy 2.6。

任何想法?

感谢

2 个答案:

答案 0 :(得分:0)

我们面临着完全相同的问题。在业务层@PreAuthorize注释工作但在REST资源上没有。这种情况的副作用是Spring bean注入不起作用。一切都没有任何错误。

100%可行的解决方案是使用RESTEasy而不是Jersey。它们非常相似,所以工作量不大。

答案 1 :(得分:0)

弹簧组件扫描未正确配置!要解决此问题,只需正确添加组件扫描即可。