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}/conftomcat-users.xml文件。 然后只需编辑它应该看起来像的文件

     

第二..

您仍需要稍微配置web.xml。 你需要做一些事情

  1. 声明允许使用该应用程序的角色。 你可以将它放在

      user   admin  
  2. 声明允许访问定义的路径的角色

       Protected Area /api/protected/* GET   *   

    这里我们说任何带有一个声明角色的经过身份validation的用户( * )都可以通过servlet容器安全控制直到Jersey应用程序。 或者,您可以定义角色而不是* 。 这将导致servlet容器处理访问控制。 但是如果你想要更细粒度的控制,只需让所有经过身份validation的用户进入,并使用你当前正在做的注释处理Jersey内部的访问控制。

  3. 您需要定义以声明什么类型的身份validation。 只有三个。 FORMDIGESTBASIC 。 这里我们将使用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中配置安全性的更多信息