gpt4 book ai didi

java - 使用 HTTP header 凭证保护基于 RESTEasy 的 RESTFul 服务

转载 作者:行者123 更新时间:2023-11-30 03:45:26 25 4
gpt4 key购买 nike

我正在尝试开发一个使用 RESTEasy 编写的 RESTFul 服务。当我尝试使用基于 RESTEasy 角色的身份验证和基于 HTTP header 的身份验证凭据来限制服务访问时,由于以下原因未成功。

根据服务上定义的 @RolesAllowed 正确限制标记的服务。然而,在尝试访问时,它会在后端抛出一个更通用的异常(“HTTP 403 Forbidden”)。这违背了我的意愿,因为即使我在 HTTP header 中传递了安全凭证,它也会引发相同的异常。

当我尝试通过引入 ContainerRequestFilter 来解决此问题时,它从未被调用。
谁能帮我解决这个问题并指出哪里出了问题。

这些是实现细节

服务等级

<pre>
@Path("/user-service")
public class UserService {

@RolesAllowed("ADMIN")
@PUT
@Path("/users/{userName}")
public Response updateUser(@PathParam("userName") String userName, @Context Request req) {
// Do processing stuff here

return Response.status(200).build();
}
}
</pre><br>

安全拦截器类

<pre> 
@Provider
@PreMatching
public class SecurityInterceptor implements javax.ws.rs.container.ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) {
System.out.println("<SecurityInterceptor> Invoking SecurityInterceptor filter");

ResourceMethodInvoker methodInvoker = (ResourceMethodInvoker) requestContext
.getProperty("org.jboss.resteasy.core.ResourceMethodInvoker");
Method method = methodInvoker.getMethod();

// Do process HTTP Header and authorized based on the auth Token
}
}
</pre>

web.xml

<web-app>
<context-param>
<param-name>resteasy.resources</param-name>
<param-value>my.package.UserService</param-value>
</context-param>

<context-param>
<param-name>resteasy.role.based.security</param-name>
<param-value>true</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>

<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

最佳答案

问题已通过更改 web.xml 文件得到解决。
看来我添加了一些不必要的语句,最终导致了过滤器调用。
请在下面找到正确的配置详细信息。

web.xml

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

<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>/*</url-pattern>
</servlet-mapping>
</web-app>

关于java - 使用 HTTP header 凭证保护基于 RESTEasy 的 RESTFul 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25860271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com