问题描述
|
我目前有一个通过Tomcat运行一些基本身份验证的Web服务。我会看到弹出的对话框,可以使用在tomcat-users.xml文件中定义的帐户登录。但是,在基于角色定义权限时,我遇到了一些问题。
目前,我有三个角色:经理,管理员和用户。我有几种方法只能由管理员角色访问。我可以以我的管理员/管理员/用户超级帐户身份登录,并且一切正常,但是我也可以像普通用户一样进行操作。
方法的定义如下:
@Path(\"/Test\")
@RolesAllowed(\"admin\")
public class Test
{
@GET
@RolesAllowed(\"user\")
public methodThatMyUsersCanAcess{}
@GET
@Path(\"/Secure\")
@RolesAllowed(\"admin\")
public methodThatOnlyAdminsCanAcess{}
}
我真的不确定'用户'角色将如何访问第二种方法,但是仍然会以某种方式发生。
解决方法
经过更多调查后,我发现由于web.xml文件的配置方式,使用ѭ1不能在代码中执行任何操作。我决定朝着通过URI路径设置身份验证的方向发展。这是通过修改web.xml来完成的,以允许一部分用户访问单独的“ 2”标记下的每个路径。我在这里找到了我的最佳资源:http://www.coderanch.com/t/176095/java-Web-Component-SCWCD/certification/auth-constraint-confusion在第二篇文章中。
, 关键是在web.xml中配置“ 3”,如下所示:
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.mycompany.mobile.rest</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.feature.Trace</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
<param-value>com.mycompany.mobile.rest.filter.RestSecurityFilter</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
<param-value>com.sun.jersey.api.container.filter.RolesAllowedResourceFilterFactory</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>