我正在尝试在我的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]"
我希望能够在不进行任何代码修改的情况下提取证书信息。
如果您使用该使用者名称对用户进行身份验证,那么我认为您可以使用“ %u
”登录用户名称
如果需要其他任何内容,则需要编写javax.servlet.Filter
或ServletRequestListener
,将该值设置为ServletRequest
上的属性。该值可以是实现toString()的任何对象。
javax.servlet.request.X509Certificate
请求属性是一个证书数组,在Servlet规范ch.3.9 SSL属性(Servlet规范3.1)中定义]
我有同样的问题。我发现的唯一方法是覆盖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)
confix server.xml以使用Valve,用您的Valve替换Valve类
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"-->