gpt4 book ai didi

java - 阻止用户访问每个 wsdl 元素

转载 作者:行者123 更新时间:2023-12-01 09:43:53 24 4
gpt4 key购买 nike

我有一个 SOAP Web 服务,其中包含许多不同的操作。我试图阻止所有用户都可以访问它们。我尝试通过编辑 web.xml 文件安全约束来实现此目的。

假设我的服务有操作 1、2 和 3。我有 user1 和 user2。我希望 user1 能够访问 1、2 和 3。user2 应该只能访问 3。我设置了两个具有不同角色的安全约束。

     <security-constraint>
<web-resource-collection>
<web-resource-name>SOAP Service</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>DELETE</http-method>
<http-method>POST</http-method>
<http-method>PUT</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>user1</role-name>
</auth-constraint>
</security-constraint>

<security-constraint>
<web-resource-collection>
<web-resource-name>SOAP Service</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>DELETE</http-method>
<http-method>POST</http-method>
<http-method>PUT</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>user2</role-name>
</auth-constraint>
</security-constraint>

这工作正常,允许 user1 和 user2 访问 wsdl 公开的所有内容,因此我尝试通过更改 url-pattern 来进一步限制 user2 可以执行的操作。

<security-constraint>
<web-resource-collection>
<web-resource-name>SOAP Service</web-resource-name>
<url-pattern>/3/*</url-pattern>
<http-method>DELETE</http-method>
<http-method>POST</http-method>
<http-method>PUT</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>user2</role-name>
</auth-constraint>
</security-constraint>

不幸的是,这不起作用。有人告诉我这是因为这是一个 SOAP 请求,并且所有请求都来自同一个网址???所以我现在被困住了。允许某些用户只能访问 wsdl 的部分内容的最佳方法是什么?

最佳答案

必须做大量研究,因为我对 Web 服务了解不够。最后,我拥有的是一个驻留在 tomcat 容器中的 Web 服务,我使用 web.xml 中配置的基本身份验证以及 tomcat-users.xml 中的用户。 web.xml 看起来像

<security-constraint>
<web-resource-collection>
<web-resource-name>SOAP Service</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>DELETE</http-method>
<http-method>POST</http-method>
<http-method>PUT</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>serviceUsers</role-name>
</auth-constraint>
</security-constraint>

<security-constraint>
<web-resource-collection>
<web-resource-name>SOAP Service</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>DELETE</http-method>
<http-method>POST</http-method>
<http-method>PUT</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>otherUsers</role-name>
</auth-constraint>
</security-constraint>

<security-role>
<role-name>serviceUsers</role-name>
</security-role>

<security-role>
<role-name>otherUsers</role-name>
</security-role>

这会阻止任何人访问整个服务,除非他们具有 serviceUsers 或 otherUsers 角色。我想要做什么阻止每个操作。为此,我必须编辑我的 serviceEndpointImpl。我添加了什么

@Resource
private WebServiceContext context;

if (context.isUserInRole("webServiceUsers")) {
//do whatever that user should be able to do or block them.
}

它的作用是根据用户使用的 tomcat-user.xml 用户名和密码获取连接到您的服务的用户的角色。使用这个,我能够将身份验证保持在容器级别,但仍然拒绝用户访问我不希望他们使用的方法。

关于java - 阻止用户访问每个 wsdl 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38229786/

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