gpt4 book ai didi

java - 如何在 Java Restful Web 服务中添加安全性

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

我是一个 Restful 网络服务提供商。我的服务被其他一些第三方使用,因此我决定增加我的服务的安全性。当我仔细观察时,我发现一些网站提供基于角色的访问;即除 JAAS 之外的身份验证和授权。有替代方案吗?

最佳答案

您可以使用以下方法之一来支持身份验证、授权或加密来保护您的 RESTful Web 服务:

使用 web.xml 保护 RESTful Web 服务

您可以使用 web.xml 来保护 RESTful Web 服务的安全与其他 Java EE Web 应用程序一样的部署描述符。有关完整的详细信息,请参阅 Oracle WebLogic Server 的编程安全性中的“开发安全的 Web 应用程序”。

例如,要使用基本身份验证保护您的 RESTful Web 服务,请执行以下步骤:

  1. 定义<security-constraint>对于您计划保护的每组 RESTful 资源 (URI)。

  2. 使用<login-config>元素来定义您要使用的身份验证类型以及将应用安全约束的安全领域。

  3. 使用 <security-role> 定义一个或多个安全角色标记并将它们映射到步骤 1 中定义的安全约束。有关详细信息,请参阅《Oracle WebLogic Server 安全性编程》中的“安全角色”。

  4. 要启用加密,请添加 <user-data-constraint>元素并设置 <transport-guarantee> CONFIDENTIAL 的子元素。有关详细信息,请参阅 Oracle WebLogic Server 编程安全性中的“用户数据约束”。

欲了解更多详情,

示例 5-1 使用基本身份验证保护 RESTful Web 服务

<web-app>
<servlet>
<servlet-name>RestServlet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RestServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>Orders</web-resource-name>
<url-pattern>/orders</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>default</realm-name>
</login-config>
<security-role>
<role-name>admin</role-name>
</security-role>
</web-app>

使用 SecurityContext 保护 RESTful Web 服务

示例 5-2 使用 SecurityContext 保护 RESTful Web 服务

package samples.helloworld;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.SecurityContext;
import javax.ws.rs.core.Context;

...

@Path("/stateless")
@Stateless(name = "JaxRSStatelessEJB")
public class StlsEJBApp {
...
@GET
@Produces("text/plain;charset=UTF-8")
@Path("/hello")
public String sayHello(@Context SecurityContext sc) {
if (sc.isUserInRole("admin")) return "Hello World!";
throw new SecurityException("User is unauthorized.");
}

使用注释保护 RESTful Web 服务

示例 5-3 使用 SecurityContext 保护 RESTful Web 服务

package samples.helloworld;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.annotation.Security.RolesAllowed;


@Path("/helloworld")
@RolesAllowed({"ADMIN", "ORG1"})
public class helloWorld {

@GET
@Path("sayHello")
@Produces("text/plain")
@RolesAllows("ADMIN")
public String sayHello() {
return "Hello World!";
}
}

Source

关于java - 如何在 Java Restful Web 服务中添加安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23440059/

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