我正在尝试使用弹簧安全注释来保证球衣服务而没有任何运气。
我已将此部分添加到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。
任何想法?
感谢
答案 0 :(得分:0)
我们面临着完全相同的问题。在业务层@PreAuthorize注释工作但在REST资源上没有。这种情况的副作用是Spring bean注入不起作用。一切都没有任何错误。
100%可行的解决方案是使用RESTEasy而不是Jersey。它们非常相似,所以工作量不大。
答案 1 :(得分:0)
弹簧组件扫描未正确配置!要解决此问题,只需正确添加组件扫描即可。