对于SSL的支持,Shiro只是判断当前url是否需要SSL登录,如果需要自动重定向到https进行访问。

首先生成数字证书,生成证书到D:\localhost.keystore

使用JDK的keytool命令,生成证书(包含证书/公钥/私钥)到D:\localhost.keystore:

keytool -genkey -keystore "D:\localhost.keystore" -alias localhost -keyalg RSA

输入密钥库口令:

再次输入新口令:

您的名字与姓氏是什么?

[Unknown]:  localhost

您的组织单位名称是什么?

[Unknown]:  sisfdhuok.com

您的组织名称是什么?

[Unknown]:  sishufdsok.com

您所在的城市或区域名称是什么?

[Unknown]:  beijing

您所在的省/市/自治区名称是什么?

[Unknown]:  beijing

该单位的双字母国家/地区代码是什么?

[Unknown]:  cn

CN=localhost, OU=sishfdsuok.com, O=sishfdsuok.com, L=beijing, ST=beijing, C=cn是否正确

?

[否]:  y

输入 <localhost> 的密钥口令

(如果和密钥库口令相同, 按回车):

再次输入新口令:

通过如上步骤,生成证书到D:\ localhost.keystore;

然后设置tomcat下的server.xml

此处使用了apache-tomcat-7.0.40版本,打开conf/server.xml,找到:

  1. <!--
  2. <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
  3. maxThreads="150" scheme="https" secure="true"
  4. clientAuth="false" sslProtocol="TLS" />
  5. -->

替换为

  1. <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
  2. maxThreads="150" scheme="https" secure="true"
  3. clientAuth="false" sslProtocol="TLS"
  4. keystoreFile="D:\localhost.keystore" keystorePass="123456"/>

keystorePass就是生成keystore时设置的密码。

添加SSL到配置文件(spring-shiro-web.xml

此处使用了和十三章一样的代码:

  1. <bean id="sslFilter" class="org.apache.shiro.web.filter.authz.SslFilter">
  2. <property name="port" value="8443"/>
  3. </bean>
  4. <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
  5. ……
  6. <property name="filters">
  7. <util:map>
  8. <entry key="authc" value-ref="formAuthenticationFilter"/>
  9. <entry key="ssl" value-ref="sslFilter"/>
  10. </util:map>
  11. </property>
  12. <property name="filterChainDefinitions">
  13. <value>
  14. /login.jsp = ssl,authc
  15. /logout = logout
  16. /authenticated.jsp = authc
  17. /** = user
  18. </value>
  19. </property>
  20. </bean>

SslFilter默认端口是443,此处使用了8443;“/login.jsp = ssl,authc”表示访问登录页面时需要走SSL。

测试

最后把shiro-example-chapter14打成war包(mvn:package),放到tomcat下的webapps中,启动服务器测试,如访问localhost:9080/chapter14/,会自动跳转到https://localhost:8443/chapter14/login.jsp

如果使用Maven Jetty插件,可以直接如下插件配置:

  1. <plugin>
  2. <groupId>org.mortbay.jetty</groupId>
  3. <artifactId>jetty-maven-plugin</artifactId>
  4. <version>8.1.8.v20121106</version>
  5. <configuration>
  6. <webAppConfig>
  7. <contextPath>/${project.build.finalName}</contextPath>
  8. </webAppConfig>
  9. <connectors>
  10. <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
  11. <port>8080</port>
  12. </connector>
  13. <connector implementation="org.eclipse.jetty.server.ssl.SslSocketConnector">
  14. <port>8443</port>
  15. <keystore>${project.basedir}/localhost.keystore</keystore>
  16. <password>123456</password>
  17. <keyPassword>123456</keyPassword>
  18. </connector>
  19. </connectors>
  20. </configuration>
  21. </plugin>

示例源代码:https://github.com/zhangkaitao/shiro-example

shiro中SSL的更多相关文章

  1. Shiro权限管理框架(三):Shiro中权限过滤器的初始化流程和实现原理

    本篇是Shiro系列第三篇,Shiro中的过滤器初始化流程和实现原理.Shiro基于URL的权限控制是通过Filter实现的,本篇从我们注入的ShiroFilterFactoryBean开始入手,翻看 ...

  2. java中 SSL认证和keystore使用

    java中 SSL认证和keystore使用 2013-10-12 11:08 10488人阅读 评论(0) 收藏 举报   目录(?)[+]     好久没用过SSL认证了,东西久不用,就有点生疏. ...

  3. JAVA中SSL证书认证通讯

    JAVA中SSL证书认证通讯 SSL通讯服务端 /******************************************************************** * 项目名称 ...

  4. 从零到实现Shiro中Authorization和Authentication的缓存

    本文大纲 一.简介 二.缓存的概念 三.自定义实现缓存机制 四.什么是Ehcache 五.Ehcache怎么用 六.Spring对缓存的支持 七.Spring+Ehcache实现 八.Spring+S ...

  5. shiro中 UnknownAccountException

    一 shiro的session.request和response与服务端容器自身的这三个对象的关系 在web.xml中配置了一个Filter,拦截/*,所有的uri.在拦截器中还会调用ShiroFil ...

  6. shiro中CacheManager相关的类结构介绍,提供redis Cache实现

    cacheManager主要用于对shiro中的session.realm中的认证信息.授权信息进行缓存. 1.类结构 2.接口及类介绍 CacheManager 提供根据名字获取cache的作用. ...

  7. Shiro中的授权问题(二)

    上篇博客(Shiro中的授权问题 )我们介绍了Shiro中最最基本的授权问题,以及常见的权限字符的匹配问题.但是这里边还有许多细节需要我们继续介绍,本节我们就来看看Shiro中授权的一些细节问题. 验 ...

  8. Shiro中的授权问题

    在初识Shiro一文中,我们对Shiro的基本使用已经做了简单的介绍,不懂的小伙伴们可以先阅读上文,今天我们就来看看Shiro中的授权问题. Shiro中的授权,大体上可以分为两大类,一类是隐式角色, ...

  9. Shiro中的Rememberme后出现浏览器500错误

    问题详述:在Shiro中添加Remember me功能后,只要勾选Remember me选项为true的时候,浏览器就会跳转到一个不可达页面,并且在Chrome中显示HTTP 500错误. 问题追踪: ...

随机推荐

  1. 51nod 四级题 汇总

    51Nod-1060-最复杂的数 #include <bits/stdc++.h> using namespace std; typedef unsigned long long ull; ...

  2. c# 之 事务

    SqlTransaction事务的简单例子 { DataTable dt = new DataTable(); System.Data.SqlClient.SqlConnection cnn = ne ...

  3. HDU 6212 Zuma(区间dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=6212 题意:有一行的祖玛,只由1和0组成,每次出现连续三个及以上的就会消去,问你最少需要发射多少个球才能消完. ...

  4. 【Java】【线程】

    /* 栗子 通过Runnable接口实现简历线程实例 */ class Dog implements Runnable{ //重写run函数 public void run(){ int times ...

  5. ES6中Promise的入门(结合例子)

    一.Promise的前言 解决回调地狱 //以往回调方式 函数1(function(){ //代码执行...(ajax1) 函数2(function(){ //代码执行...(ajax2) 函数3(f ...

  6. ngui项目花屏问题

    项目用的ngui 最近在金立手机上遇到一个问题就是  启动的时候会花一下屏幕 一闪而过  由于ngui默认camera使用的是clear depth  所以按照网上的办法修改 color 跟skybo ...

  7. Mybatis的SqlSession理解(一)

    SqlSession是Mybatis最重要的构建之一,可以认为Mybatis一系列的配置目的是生成类似JDBC生成的Connection对象的statement对象,这样才能与数据库开启“沟通”,通过 ...

  8. JavaScript的案例(数据校验,js轮播图,页面定时弹窗)

    1.数据校验            步骤            1.确定事件(onsubmit)并绑定一个函数            2.书写这个函数,获取数据,并绑定id            3. ...

  9. C#发起HTTP请求

    浏览器能看到的数据  用后端模拟请求都能获取到  如果拿不到 看看是不是请求参数哪里没设置 刚好服务器检查了这个参数 string url = ""; string para = ...

  10. 力扣(LeetCode)7.整数反转

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: ...