ssl配置
首先要配置tomcat使其支持SSl,具体配置方式如下(我的是tomcat8):
- 生成证书:
cmd窗口运行:
keytool -genkey -alias tomcat -keyalg RSA -keystore D:\keystore.keystore 输入密钥库口令: 再次输入新口令: 您的名字与姓氏是什么? [Unknown]: xxx 您的组织单位名称是什么? [Unknown]: xxx 您的组织名称是什么? [Unknown]: xxx 您所在的城市或区域名称是什么? [Unknown]: xxx 您所在的省/市/自治区名称是什么? [Unknown]: xxx 该单位的双字母国家/地区代码是什么? [Unknown]: CN CN=xxx, OU=xxx, O=xxx, L=xxx, ST=xxx, C=CN是否正确? [否]: y 输入 <tomcat> 的密钥口令 (如果和密钥库口令相同, 按回车): C:\Users\gaogang>
- 将生成的keystore.keystore复制到tomcat根目录的bin目录下
- 配置tomcat,修改server.xml:
将这段配置注释去掉: <!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> --> 改成如下形式: <Connector SSLEnabled="true" clientAuth="false" keystoreFile="D:\Program Files\apache-tomcat-8.0.36\bin\keystore.keystore" keystorePass="xxx" maxThreads="150" port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" secure="true" sslProtocol="TLS"/>
项目使用SSl,即https,目前支持通过两种方式进行配置,一种是通过shiro,添加过滤器实现,一种是通过Java Web的安全验证机制实现,注意两种方式二选一。
- 第一种: 配置shiro过虑器: 在spring-shiro.xml文件中如下配置:
<bean id="sslFilter" class="org.apache.shiro.web.filter.authz.SslFilter"> <property name="port" value="8443"/> </bean> <!-- 自定义过滤器 --> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <!-- shiro的核心安全接口 --> <property name="securityManager" ref="securityManager" /> <!-- 要求登录时的链接 --> <property name="loginUrl" value="/login.html" /> <!-- 登陆成功后要跳转的连接 --> <property name="successUrl" value="/index.html" /> <!-- 未授权时要跳转的连接 --> <property name="unauthorizedUrl" value="/denied.jsp" /> <!-- Shiro连接约束配置,即过滤链的定义 --> <!-- 此处可配合我的这篇文章来理解各个过滤连的作用http://blog.csdn.net/jadyer/article/details/12172839 --> <!-- 下面value值的第一个'/'代表的路径是相对于HttpServletRequest.getContextPath()的值来的 --> <!-- anon:它对应的过滤器里面是空的,什么都没做,这里.do和.jsp后面的*表示参数,比方说login.jsp?main这种 --> <!-- authc:该过滤器下的页面必须验证后才能访问,它是Shiro内置的一个拦截器org.apache.shiro.web.filter.authc.FormAuthenticationFilter --> <!-- 动态加载权限 --> <property name="filterChainDefinitions" value="#{chainDefinitionService.initFilterChainDefinitions()}" /> <!-- 这里暂时静态加载方式 --> <!-- <property name="filterChainDefinitions"> <value> /login.html = authc /logout.html = logout /register.html = anon /captcha.html = anon /denied.jsp = anon /resources/** = anon /view/error/** = anon /*/withoutAuth/** = anon /** = authc </value> </property> --> <!-- 自定义过滤器 --> <property name="filters"> <map> <entry key="kickout" value-ref="kickoutFilter" /> <entry key="kickoutAuth" value-ref="kickoutAuthFilter"/> <entry key="login" value-ref="loginFilter" /> <entry key="remember" value-ref="rememberMeFilter"/> <entry key="perm" value-ref="permissionFilter"/> <entry key="roles" value-ref="roleFilter"/> <entry key="baseUrl" value-ref="baseUrl"/> <entry key="ssl" value-ref="sslFilter"></entry> </map> </property> </bean>
在shiroAuth.props文件中做如下配置:
#需要登录,并使用ssl /**=ssl,login,remember,perm,baseUrl
- 第二种: web.xml中配置如下节点:
<security-constraint> <web-resource-collection> <web-resource-name>webside</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>