Jersey 2.x安全上下文不起作用?
虽然我正在尝试创建java jersey应用程序身份validation角色对我来说不起作用。
Java代码: –
package org.student.resource; import javax.annotation.security.PermitAll; import javax.annotation.security.RolesAllowed; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.ext.Provider; @Path("/resource") @PermitAll public class Resource { @GET public String get(){ return "GET"; } @RolesAllowed("admin") @POST public String post(){ return "Post content."; }
}
部署描述符: –
JerseyAuthentication Application org.glassfish.jersey.servlet.ServletContainer Application /* Resource /resource/* GET login.html
标题: –
Cache-Control →private Content-Language →en Content-Length →1010 Content-Type →text/html;charset=utf-8 Date →Sat, 19 Sep 2015 08:14:18 GMT Expires →Thu, 01 Jan 1970 05:30:00 IST Server →Apache-Coyote/1.1
请帮助我做一些帮助。我想知道为资源分配角色。
所以你需要做三件事
第一..
在Tomcat中设置安全领域(我假设服务器是Server →Apache-Coyote/1.1
)。 您可以在Realm Configuration HOW-TO中阅读有关创建领域的更多信息。
最简单的配置领域是UserDatabaseRealm ,但绝不建议用于生产。 这只是让你在开发中运行起来。 您需要做的就是转到${TOMCAT_HOME}/conf
的tomcat-users.xml
文件。 然后只需编辑它应该看起来像的文件
第二..
您仍需要稍微配置web.xml。 你需要做一些事情
-
声明允许使用该应用程序的角色。 你可以将它放在
user admin -
声明允许访问
定义的路径的角色Protected Area /api/protected/* GET * 这里我们说任何带有一个声明角色的经过身份validation的用户(
*
)都可以通过servlet容器安全控制直到Jersey应用程序。 或者,您可以定义角色而不是*
。 这将导致servlet容器处理访问控制。 但是如果你想要更细粒度的控制,只需让所有经过身份validation的用户进入,并使用你当前正在做的注释处理Jersey内部的访问控制。 -
您需要定义
以声明什么类型的身份validation。 只有三个。FORM
,DIGEST
,BASIC
。 这里我们将使用BASIC
,并声明用户所在的领域。BASIC UserDatabaseRealm 你可以将它放在
最后..
您只需要通过注册RolesAllowedDynamicFeature
来配置Jersey来处理安全注释。 您可以在web.xml中执行此操作
Application org.glassfish.jersey.servlet.ServletContainer jersey.config.server.provider.packages org.student.resource jersey.config.server.provider.classnames org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature 1
也可以看看:
- 保护Web应用程序以获取有关在web.xml中配置安全性的更多信息