我试图通过Resteasy公开一些REST Web服务并保护它们。但是,当访问这些方法时,我会不断收到401错误。请帮助我解决此问题。

我的配置如下。

web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">


    <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>true</param-value>
    </context-param>

    <context-param>
        <param-name>resteasy.role.based.security</param-name>
        <param-value>true</param-value>
    </context-param>

    <!-- this need same with resteasy servlet url-pattern -->
    <context-param>
        <param-name>resteasy.servlet.mapping.prefix</param-name>
        <param-value>/api/v1/</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>resteasy-servlet</servlet-name>
        <servlet-class>
            org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
        </servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>resteasy-servlet</servlet-name>
        <url-pattern>/api/v1/*</url-pattern>
    </servlet-mapping>

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>resteasy-servlet</web-resource-name>
            <url-pattern>/api/v1/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>JBossRS</realm-name>
    </login-config>

    <security-role>
        <role-name>admin</role-name>
    </security-role>


    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>


在我的网络服务方法中

@Path("/services")
public class TestService {

    @RolesAllowed("admin")
    @GET
    @Path("/testService")
    public Response testResponse(){
        String stg = "Hello";
        return Response.status(200).entity(stg).build();
    }

}


在Jboss widlfly standalone.xml中,我添加了安全域,

<security-domain name="JBossRS">
                    <authentication>
                        <login-module code="UsersRoles" flag="required">
                            <module-option name="usersProperties" value="${jboss.server.config.dir}/jbossrs-users.properties"/>
                            <module-option name="rolesProperties" value="${jboss.server.config.dir}/jbossrs-roles.properties"/>
                        </login-module>
                    </authentication>
                </security-domain>


在jbossrs-roles.properties中,

admin=admin


在jbossrs-users.properties中,

admin=test123


尝试访问REST方法时,系统提示我输入我的用户名和密码。当我使用admin和test123作为凭据时,它一直给我401错误。

当我尝试在没有安全性的情况下访问它们时,它也可以正常工作。

我在这里做错了什么。

提前致谢。

最佳答案

我发现了问题。它没有在jboss-web.xml中指定安全领域。

在WEB-INF下创建了jboss-web.xml并添加了以下配置。

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <security-domain>JBossRS</security-domain>
</jboss-web>

10-08 08:39