- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在创建一个使用相互身份验证的 Web 服务(和测试客户端)。我用过 this guide创建 CA 和 key /信任库,但我没有为客户端创建 .p12 文件,而是使用“设置您的 Web 服务器”部分为我需要验证的每个客户端创建一个 keystore 。
服务器端代码很简单,应该返回经过身份验证的用户的名称:
import javax.annotation.Resource;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.WebServiceContext;
@WebService()
public class ListProducts {
@Resource WebServiceContext context;
@WebMethod(operationName = "listProducts")
public String listProducts() {
return context.getUserPrincipal().toString();
}
}
客户端代码如下:
System.getProperties().setProperty("javax.net.trustStore", "C:\\NetBeansProjects\\security-client\\client.jks");
System.getProperties().setProperty("javax.net.trustStorePassword", "changeit");
System.getProperties().setProperty("javax.net.keyStore", "C:\\NetBeansProjects\\security-client\\client.jks");
System.getProperties().setProperty("javax.net.keyStorePassword", "changeit");
ListProductsService lps = new ListProductsService();
ListProducts lp = lps.getListProductsPort();
System.out.println(lp.listProducts());
我的 web.xml 文件的安全部分如下所示:
<security-constraint>
<display-name>HTTPS</display-name>
<web-resource-collection>
<web-resource-name>All</web-resource-name>
<description/>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<description>Force HTTPS</description>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>CLIENT-CERT</auth-method>
</login-config>
为了以防万一,我正在部署到 GlassFish,我已经使用管理控制台将 SSL 网络监听器设置为使用 SSL3、TLS 和客户端身份验证,并填写了相关的 keystore 和信任库,并设置了 PKIX作为信任算法。
问题是客户端的输出是ANONYMOUS
。我真正想要的是打印在证书中的用户信息(例如 CN=Joe Bloggs, OU=Some Org Unit, O=Some Org, L=AnyTown, ST=AnyState, C=US
)
查看同样返回的 MessageContext
对象,其他字段似乎已正确填充,所以我想知道为什么没有捕获安全信息。我确信正在进行 SSL 握手,因为当我使用 -Djavax.net.debug=ssl,handshake
时,记录的消息看起来很好(另外,如果我将客户端指向另一个 keystore 摔倒)。有什么想法吗?
最佳答案
我采用了不同的方法并使一切正常(最终)。您可以在this answer中查看详细信息.简而言之,我在问题中使用的身份验证级别太高,Java 无法在 Web 服务级别访问它。
关于java - 使用相互身份验证时,WebServiceContext.getUserPrincipal 返回 "ANONYMOUS",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3082633/
我有两个使用 JAX-WS 实现的 Web 服务:RequestService 和 ExtendedRequestService。 ExtendedRequestService 调用 RequestS
我想知道使用基本身份验证的 HTTP 请求的用户名和密码。 我正在使用 WebServiceContext。 @Resource private WebServiceContext conte
在我的 Web 服务中,我有: @WebService(serviceName = "myservice") public class ServiceName{ @Resource p
我知道之前有人问过这个问题,但没有一个解决方案对我有用。可能是因为他们主要使用符合 EE 的应用程序服务器,这不是我的情况。 我在 jetty 上运行我的网络服务(通过 Eclipse)仅用于开发。但
我正在尝试在我的网络服务中使用 ServletContext,但是 WebServiceContext 始终是 NULL。谁能告诉我我做错了什么,我正在使用 spring 框架和 tomcat。 pa
我正在创建一个使用相互身份验证的 Web 服务(和测试客户端)。我用过 this guide创建 CA 和 key /信任库,但我没有为客户端创建 .p12 文件,而是使用“设置您的 Web 服务器”
我有一个带有 4 个 WebMethods 的 Wildfly 8.1.0 WebService。 我需要记录 SOAP 消息(业务需求) 我注入(inject)了有效的 WebServiceCont
我正在尝试使用 @Resource 注释设置 CXF Apache Web 服务的上下文。但是上下文总是空的。请帮助克服这个问题。下面是我正在尝试访问 messageContext 的网络服务。 @W
我正在关注this guide构建一个名为 [Entando][2] 的应用程序。 特别是,我使用 maven 命令执行了 2.2 中的步骤来构建应用程序 mvn archetype:generate
我有一些 EJB 作为 JAX-WS Web 服务: @WebService @Stateless @Remote(MobileFacade.class) public class MobileFac
我有一个 Metro jax-ws 网络服务,看起来或多或少像这样: @WebService @Transactional public class UserManagementServiceImpl
我尝试将我的应用程序部署到 Tomcat 6 with Metro/Jersey 和 Glassfish 3.1.2,但是访问 WebServiceContext 资源总是会导致空指针异常,除了当我使
我使用的是 SAP NetWeaver 7.3 EHP 1(经过 JEE5 认证),并且我已经为现有 WSDL 生成了 Web 服务框架。此 Web 服务中的所有方法都是非阻塞的,因此用 @Onewa
我是一名优秀的程序员,十分优秀!