-
Notifications
You must be signed in to change notification settings - Fork 9
SSL
wjggwm edited this page Jun 19, 2017
·
1 revision
首先要配置tomcat使其支持SSl,具体配置方式如下(我的是tomcat8):
- 生成证书:
C:\Users\gaogang>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>