Skip to content
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>
Clone this wiki locally