最近在做一个web项目,用到了Struts2 + Shiro。按照文章 http://jinnianshilongnian.iteye.com/blog/2036420   的配置,生成了证书,配置了Tomcat和Shiro。但在启动Tomcat时,报如下错误:“java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR”。

通过文章http://www.devba.com/index.php/archives/3939.html获悉:Tomcat提供了两个SSL实现,一个是JSSE实现,另一个是APR实现。Tomcat将自动选择使用哪个实现,即如果安装了APR则自动选择APR,否则选择JSSE。如果不希望让Tomcat自动选择,而是我们自己指定一个实现则可通过protocol定义,如下:。


APR文件名为tcnative-1.dll。6.0里没这个dll文件,而7.0里有。换句话说,6.0默认使用JSSE实现,而7.0默认使用APR实现。弄明白缘由就好办了。由于习惯使用6.0的配置方式(即JSEE实现),因此只要把conf\server.xml里的protocol修改一下就行了: 

<    

Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"              maxThreads="150" scheme="https" secure="true"   clientAuth="false" sslProtocol="TLS" 

      keystoreFile="${user.home}/.keystore"    keystorePass="pass"

 />