我需要访问HttpServletRequest属性来获取javax.servlet.request.X509Certificate,它包含用于TLS请求的证书的X509Certificate数组。
从JAX-RS ContainerRequestFilter中,我可以很容易地从ContainerRequestContext.getProperty(String property)方法中提取它,但是我无法找到从WebSocket Session或HandshakeRequest获取它的方法,因为我可以从HandshakeRequest中访问HttpSession实例,但不能访问HttpServletRequest实例。
注意:这不是Accessing HttpSession from HttpServletRequest in a Web Socket @ServerEndpoint的副本,因为我需要访问HttpServletRequest (或等效于提取HttpServletRequest证书),而不是HttpSession。
由于WebSocket是HTTP的超集,我想它应该是可能的,并希望Java已经想出了一种访问servlet属性的方法,但我真的找不到。有人知道这是否可能吗?
发布于 2016-03-23 19:49:26
没有黑客:
与黑客有关:
ServletRequest字段。javax.servlet.request.X509Certificate属性。
换言之:
公共类ServletAwareConfigurator扩展Configurator { @Override void modifyHandshake(ServerEndpointConfig config,HandshakeRequest request,HandshakeResponse response) { ServletRequest servletRequest = getField(request,ServletRequest.class);X509 Certificate[]证书=(X509 Certificate[])ServerEndpointConfig // .}私有静态 F getField(I实例,类fieldType) { try {try{ for (F> type =F>());类型!= Object.class;类型=type.getSuperclass(){ for (字段: type.getDeclaredFields()) { if (fieldType.isAssignableFrom(field.getType(){field.setAccessible(真);返回(F) field.get(实例);}}{ //句柄?}返回空;}}https://stackoverflow.com/questions/36184382
复制相似问题