简介
泽西岛:2.9
Jersey documentation的这一部分描述了如何为REST服务提供授权。有两种方法可以做到这一点:
第一种方法工作正常,但我无法完成第二项工作。
案例1(使用web.xml):
此示例有效。它是出于提供信息的目的。如果你想跳第二个,那就不行了。
资源非常简单:
@Path("/HelloWorld")
public class HelloWorldResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayHelloWorld(){
return "Hello World!!!";
}
}
安全配置放在web.xml文件中,如下所示:
<web-app ...>
<servlet>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<!-- SECURITY -->
<security-constraint>
<web-resource-collection>
<url-pattern>/rest/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>boss</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>DefaultRealm</realm-name>
</login-config>
</web-app>
这个例子很好用。当我尝试访问http:// {myhost}:8080 / {war_name} / rest / HelloWorld时,我必须提供用户名和密码。这意味着Realm和数据库中的配置就可以了。所以没有必要在这里显示它。
案例2(JSR 250注释):
此示例不起作用。资源几乎与第一个示例中的相同,只添加了一些注释:
@Path("/HelloWorld")
@PermitAll
public class HelloWorldResource {
@RolesAllowed("boss")
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayHelloWorld(){
return "Hello World!!!";
}
}
如您所见,添加了两个注释。它与第一个示例中的安全策略相同,但使用了web.xml注释的定义。
现在web.xml看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<web-app ...>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>DefaultRealm</realm-name>
</login-config>
</web-app>
此外,还添加了新类(如文档中所述):
@ApplicationPath("rest")
public class MyApplication extends ResourceConfig {
public MyApplication() {
super(HelloWorldResource.class);
register(RolesAllowedDynamicFeature.class);
}
}
这门课很重要。如您所见,已注册RolesAllowedDynamicFeature。 所以有两个主要步骤: - 向资源添加注释 - 注册RolesAllowedDynamicFeature 完成了。
问题:
第二个例子不起作用。弹出窗口提供的用户名和密码永远不会显示出来。每次回复都是403禁止。这不是Realm和数据库配置的问题,因为这个配置适用于第一个示例。
所以问题是:我的第二次实施有什么问题?
提前Tnaks。
答案 0 :(得分:0)
尝试将此添加到web.xml块
,而不是ResourceConfig子类<init-param>
<param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
<param-value>com.sun.jersey.api.container.filter.RolesAllowedResourcFilterFactory</param-value>
</init-param>