整合Spring
接下来应该是大家比较关系的一步:整合Spring
我是在之前的Spring SpringMVC Mybatis
的基础上进行整合的。
web.xml配置
首先我们需要在web.xml
进行配置Shiro的过滤器 我只贴Shiro部分的,其余的和之前配置是一样的
shiroFilter org.springframework.web.filter.DelegatingFilterProxy targetFilterLifecycle true shiroFilter /*
配置还是比较简单的,这样会过滤所有的请求 之后我们还需要在Spring中配置一个shiroFilter
的bean。
spring-mybatis.xml配置
由于这里配置较多,我就全部贴一下
/loginAdmin=anon /admin*=authc /student=roles[teacher] /teacher=perms["user:create"]
在这里我们配置了上文中所提到的自定义myRealm
,这样Shiro就可以按照我们自定义的逻辑来进行权限验证了。其余的都比较简单,看注释应该都能明白 着重讲解一下
/loginAdmin=anon /admin*=authc /student=roles[teacher] /teacher=perms["user:create"]
- /loginAdmin=anon的意思的意思是,发起/loginAdmin这个请求是不需要进行身份认证的,这个请求在这次项目中是一个登录请求,一般对于这样的请求都是不需要身份认证的。
- /admin*=authc表示 /admin,/admin1,/admin2这样的请求都是需要进行身份认证的,不然是不能访问的。
- /student=roles[teacher]表示访问/student请求的用户必须是
teacher
角色,不然是不能进行访问的。
- /teacher=perms[“user:create”]表示访问/teacher请求是需要当前用户具有
user:create
权限才能进行访问的 更多相关权限过滤的资料可以访问shiro的官方介绍:传送门
使用Shiro标签库
Shiro还有着强大标签库,可以在前端帮我获取信息和做判断 我贴一下我这里登录完成之后显示的界面
<%-- Created by IntelliJ IDEA. User: Administrator Date: 2016/7/14 Time: 13:17 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> 后台 这是admin角色登录: 有user:create权限信息 登录成功
要想使用Shiro标签,只需要引入一下标签即可<%@ taglib="" prefix="shiro" uri="http://shiro.apache.org/tags" %="">
- 具有
admin
角色才会显示标签内的信息。
- 获取用户信息。默认调用
Subject.getPrincipal()
获取,即 Primary Principal。
- 用户拥有
user:create
这个权限才回显示标签内的信息 更多的标签可以查看官网:传送门
整体测试
接下来输入一个正确的
crossoverJie他是有admin
的角色,并且拥有user:*
(ps:系统数据详见上面的数据库截图)的权限,所以在这里
这是admin角色登录: 有user:create权限信息
只有teacher
角色才能访问/student
这个请求的
aaa用户登录,他正好是teacher
角色,看能不能访问/student
/student返回的是同一个界面所以看到的还是这个界面
@RequestMapping("/teacher") public String teacher(){ return "admin" ; }
并且没有显示之前Shiro标签内的内容 其他的我就不测了,大家可以自己在数据库里加一些数据,或者是改下拦截的权限多试试,这样对Shiro的理解就会更加深刻。
MD5加密
Shiro还封装了一个我认为非常不错的功能,那就是MD5加密,代码如下
package com.crossoverJie.shiro; import org.apache.shiro.crypto.hash.Md5Hash; /** * Created with IDEA * 基于Shiro的MD5加密 * Created by ${jie.chen} on 2016/7/13. */ public class MD5Util { public static String md5(String str,String salt){ return new Md5Hash(str,salt).toString() ; } public static void main(String[] args) { String md5 = md5("abc123","crossoverjie") ; System.out.println(md5); } }
代码非常简单,只需要调用Md5Hash(str,salt)
方法即可,这里多了一个参数,第一个参数不用多解释,是需要加密的字符串。第二个参数salt
中文翻译叫盐,加密的时候我们传一个字符串进去,只要这个salt不被泄露出去,那原则上加密之后是无法被解密的,在存用户密码的时候可以使用,感觉还是非常屌的。
总结
以上就是Shiro实际使用的案例,将的比较初略,但是关于Shiro的核心东西都在里面了。大家可以去我的github上下载源码,只要按照我给的数据库就没有问题,项目跑起来之后试着改下里面的东西可以加深对Shiro的理解。
项目地址:github.com/crossoverJi…http://crossoverjie.top GitHub地址:github.com/crossoverJi…。