Shiro 使用详解(下)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 相比有做过企业级开发的童鞋应该都有做过权限安全之类的功能吧,最先开始我采用的是建用户表,角色表,权限表,之后在拦截器中对每一个请求进行拦截,再到数据库中进行查询看当前用户是否有该权限,这样的设计能满足大多数中小型系统的需求。不过这篇所介绍的Shiro能满足之前的所有需求,并且使用简单,安全性高,而且现在越来越的多企业都在使用Shiro,这应该是一个收入的你的技能库。

整合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…


相关文章
|
存储 JSON 前端开发
Shiro实现记住我(十)
Shiro实现记住我(十)
425 0
Shiro实现记住我(十)
|
安全 测试技术 API
Shiro详解
Shiro详解
120 0
|
安全 Java 容器
深入理解Shiro(下)
深入理解Shiro(下)
78 0
|
安全 Java 测试技术
深入理解Shiro(上)
深入理解Shiro(上)
83 0
|
安全 Java 数据库连接
Shiro 中的 Realm
Shiro 中的 Realm
114 0
|
存储 缓存 安全
|
消息中间件 JavaScript 小程序
再见了 shiro
再见了 shiro
|
消息中间件 安全 JavaScript
再见了 shiro !
再见了 shiro !
|
缓存 安全 前端开发
|
Java 数据安全/隐私保护
shiro(二)shiro详解(1)
shiro(二)shiro详解
247 0
shiro(二)shiro详解(1)