java - 在 Jboss Wildfly 中访问 Resteasy 服务方法时抛出 401 未经授权的错误

标签 java jboss7.x resteasy

我正在尝试通过 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 widlflystandalone.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>

关于java - 在 Jboss Wildfly 中访问 Resteasy 服务方法时抛出 401 未经授权的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28556808/

相关文章:

java - EJB 3.1 - 为什么无状态 bean 必须通过其接口(interface)注入(inject)(如果有的话)?

java - 在 Jetty 应用程序中找不到 Resteasy 资源

java - 为 JavaFX 项目构建而不创建 exe

java - 我们在 java 中是否有一个 Readonly 字段(在类本身的范围内可以设置)?

java - rt.jar 中类 Java API 的 Eclipse 调试问题

java - 这个命令是什么意思 - "nohup ./standalone.sh -b 0.0.0.0 &"?

java - 如何使用单击按钮从任何 Activity 重定向到下一个 Activity ?

java - 使用 Http11NioProtocol 时启动 JBoss EAP 6.2 时出错

java - JAX-RS + RESTEasy 服务返回不带双引号的 JSON 字符串

java - 使用 JAXRS 获取 html 页面