我的应用程序(my-app.war)有一个JAX-RSendpoint,使用给定的角色进行保护,如下所示:
Endpoint.java
@Path("endpoint/")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@DeclareRoles({"ADMIN_ROLE"})
public class Endpoint {
@POST
@RolesAllowed({"ADMIN_ROLE"})
public void post() {
}
}
server.xml
<server>
<featureManager>
<feature>jaxrs-2.1</feature>
<feature>appSecurity-3.0</feature>
</featureManager>
<application id="my-app" context-root="/" location="my-app.war" type="war">
</application>
<variable name="default.http.port" defaultValue="9080"/>
<variable name="default.https.port" defaultValue="9443"/>
<httpEndpoint id="defaultHttpEndpoint" httpPort="${default.http.port}" httpsPort="${default.https.port}"/>
<basicRegistry realm="defaultRealm">
<user name="test-user" password="test-password"/>
<group name="ADMIN_GROUP">
<member name="test-user"/>
</group>
</basicRegistry>
</server>
现在我必须将ADMIN_GROUP
绑定到ADMIN_ROLE
。
如果我在server . XML < code > application 上这样做,那么一切都很好:
<application id="my-app" context-root="/" location="my-app.war" type="war">
<application-bnd>
<security-role name="ADMIN_ROLE">
<group name="ADMIN_GROUP" />
</security-role>
</application-bnd>
</application>
部署应用程序,并且在不进行身份验证的情况下调用endpoint时,它将返回403(需要身份验证)。当提供身份验证标头时,它将按预期返回 204(无内容)。
现在,当我尝试在ibmapplicationbnd.xml
中配置绑定时,问题就在于:
<?xml version="1.0" encoding="UTF-8"?>
<application-bnd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-application-bnd_1_2.xsd"
xmlns="http://websphere.ibm.com/xml/ns/javaee"
version="1.2">
<
<security-role name="ADMIN_ROLE">
<group name="ADMIN_GROUP" />
</security-role>
</application-bnd>
我已经将其放在<code>META-INF/ibm应用程序bnd中。xml和WEB-INF/ibm应用程序bnd.xml
。但它们都被完全忽略了(我甚至在那里添加了无效的xml,但没有收到OpenLiberty的错误消息)。
对endpoint的每次调用都返回403,即使提供了身份验证。
在 https://www.ibm.com/docs/en/was-liberty/base?topic=liberty-configuring-authorization-applications-in 中,它说[着重号是后加的]:
配置授权信息,例如用户和组到角色的映射。您可以通过以下方式配置授权表:
> < li>
如果您有EAR文件,您可以将授权配置定义添加到ibm-application-bnd.xml或ibm-application-bnd.xmi文件中。
如果有独立的WAR文件,可以将授权表定义添加到server.xml文件中相应的应用程序元素下。您可以使用WebSphere Application Server Developer Tools for Eclipse来完成这项工作。
这是否意味着对于战争应用程序,绑定必须在server.xml上?
根据这个答案,<code>META-INF/ibm application bnd。xml-尽管没有文档记录-可以在web存档中使用。
然后,我< code>mvn package了我的项目,并检查了它的war文件(仅显示相关文件):
Length Date Time Name
--------- ---------- ----- ----
0 2021-04-28 22:13 META-INF/
131 2021-04-28 22:13 META-INF/MANIFEST.MF
0 2021-04-28 22:13 WEB-INF/
0 2021-04-28 22:13 WEB-INF/classes/
0 2021-04-28 22:13 WEB-INF/classes/META-INF/
0 2021-04-28 22:13 WEB-INF/lib/
0 2021-04-22 17:58 WEB-INF/beans.xml
134 2021-04-28 22:13 WEB-INF/classes/META-INF/ibm-application-bnd.xml
592 2021-04-28 22:13 WEB-INF/classes/META-INF/persistence.xml
300365 2021-04-15 09:58 WEB-INF/lib/log4j-api-2.14.1.jar
1745700 2021-04-15 09:59 WEB-INF/lib/log4j-core-2.14.1.jar
393 2021-04-28 21:50 WEB-INF/web.xml
0 2021-04-28 22:13 META-INF/maven/
--------- -------
现在请注意,有META-INF/*
条目和WEB-INF/class/META-INF/*
条目。
然后我找到了这个答案(它与自由/开放自由无关)。它的第一句话让我敬畏:
看起来您的META-INF文件夹在src/main/resources目录中。
就像我的一样。所以我将META-INF
从src/main/Resources
移动到src/main/webapp
。
现在战争列表为:
Length Date Time Name
--------- ---------- ----- ----
0 2021-04-28 22:22 META-INF/
131 2021-04-28 22:22 META-INF/MANIFEST.MF
0 2021-04-28 22:22 WEB-INF/
0 2021-04-28 22:22 WEB-INF/classes/
0 2021-04-28 22:22 WEB-INF/lib/
134 2021-04-28 22:13 META-INF/ibm-application-bnd.xml
592 2021-04-27 10:19 META-INF/persistence.xml
0 2021-04-22 17:58 WEB-INF/beans.xml
300365 2021-04-15 09:58 WEB-INF/lib/log4j-api-2.14.1.jar
1745700 2021-04-15 09:59 WEB-INF/lib/log4j-core-2.14.1.jar
393 2021-04-28 21:50 WEB-INF/web.xml
0 2021-04-28 22:22 META-INF/maven/
--------- -------
现在,文件 ibm-application-bnd.xml
被处理。它确实有效。除了...
这样JPA就不再工作了。
似乎元 INF/持久性.xml
必须毕竟在 src/main/资源
中。
现在我有两个< code>META-INF/文件夹(\_(ツ)_/)。
更新
除了有两个META-INF/
文件夹(这本身就是一个问题)之外,现在我的测试无法访问META-INF/
中的资源(另一个,在WEB-INF/class/META-INF
中很容易获得,因为WEB-INF/class/
中的每个资源)。
那么我为什么需要访问ibm应用程序bnd。您可能会问,来自测试的xml</code>。因为我正在使用arquillian,我需要创建一个部署,我需要包括这些角色
现在我有三个选择:
>
创建
ibmapplicationbnd的副本。
;这里的问题是我需要保持两者同步;src/test/resources
中的xml
将< code>src/main/webapps
添加到surefire/failsafe类路径中(见本答案);
具体到Liberty/OpenLiberty,我可以依赖一个隐式映射(假设每个组绑定到一个同名的角色;去这里找CWWKS2104I)。这是我目前选择的一个。
选项1和3有着相同的缺点:被测试的代码并不完全是将被部署到产品中的代码。
选项2有另一个缺点:当通过ide运行测试时,这个额外的文件夹也必须添加到类路径中(除非IDE与maven有很好的集成,并且可以读取surefire/failsafe配置)。
这个
我不得不两个都用(说来也奇怪..)Weblogic 12C服务器(12.2.1)上Weblogic.xml的和属性 它是基于Jersey 1.9的REST应用程序。(Jersey 1.x JAX-RS RI)和Guice。 1.为什么使用:prefere-web-inf-classs 如果您有多个WAR,您必须将guice-jersey/guice的库放置在WAR/lib级别,否则会出现多绑定错误
我目前正在使用一台开发机器进行我的同事构建的java开发工作。此计算机上的IBM RAD安装程序具有运行服务器配置文件“Websphere Application server v6.0”的IBM Websphere-Portal安装程序,因此我可以通过浏览器使用“http://localhost:9081/wps/portal/home". 今天,我试图在RAD上设置自己的动态web项目。当运行
我正在尝试在IBM WAS(Liberty Profile)服务器之前设置IIS(版本8.x,windows 2008),以便它可以将所有特定请求路由到IBM WebSphere应用程序服务器(Liberty-Profile,Liberty)。 我已经安装了 已安装IBM WebSphere Application Server Liberty Core(8.5.5版) 已安装IBM Mobile
(截至2018年5月8日更新) 这是关于使用“WebSphere Deployer插件”将EAR部署到Jenkins中的WebSphere Application Server时在连接阶段遇到的一个问题。 “测试连接”成功。不幸的是,在实际的作业运行中,部署阶段在连接时仍然失败。 相关日志信息如下 [Jenkins控制台日志/作业日志(显示在Jenkins管理UI“控制台输出”中)] [WAS控制
问题内容: 我必须在 Weblogic 12c服务器(12.2.1) 上同时使用(非常足够..)和 weblogic.xml的 属性。 它是基于Jersey 1.9的REST应用程序。(Jersey 1.x JAX-RS RI)和Guice。 1.为什么使用:prefer-web-inf-classes 如果您有多个WAR,则必须在war / lib级别放置guice-jersey / guice
我正在IBM Websphere application Server7上使用JAX-WS使用web服务。在传递SOAP消息时设置WS消息级别安全性。UsernameToken xmlns:wsu未正确传递到提供程序端。是否需要在WebSphere Server上进行任何配置? SOAP消息打印在我的应用程序日志中, wsse:usernameToken wsu:id=“xxxx”xmlns:ws