我正在尝试在tomcat访问日志文件中包含客户端证书信息。
我查看了这篇文章:https://serverfault.com/questions/624790/tomcat-log-the-equivalent-of-ssl-client-s-dn但这只返回对证书的引用,我实际上无法提取任何属性。
我的日志文件模式如下所示:
pattern="... [%{javax.servlet.request.X509Certificate}r]"
返回:[[Ljava.security.cert.X509Certificate; @ 667a078]
有没有办法访问证书属性,例如:
pattern="... [%{javax.servlet.request.X509Certificate.SubjectName}r]"
我希望能够在不进行任何代码修改的情况下提取证书信息。
答案 0 :(得分:0)
如果您使用该主题名称对用户进行身份验证,那么我认为您可以使用" %u
"
如果您还需要其他任何内容,则需要编写javax.servlet.Filter
或ServletRequestListener
,将该值设置为ServletRequest
上的属性。该值可以是实现toString()的任何对象。
javax.servlet.request.X509Certificate
请求属性是一个证书数组,在Servlet规范中定义.ch.3.9 SSL属性(Servlet规范3.1)
答案 1 :(得分:0)
我有同样的问题。我发现的唯一方法是覆盖AccessLogValve。
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>x.x.x</version>
<scope>provided</scope>
</dependency>
@Override
public void log(Request request, Response response, long time) {
request.setUserPrincipal(xyz)
修复server.xml以使用Valve,用您的Valve替换Valve类
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"-->