SSM(三)Shiro 使用详解(下)

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

web.xml配置


首先我们需要在web.xml进行配置Shiro的过滤器。


我只贴Shiro部分的,其余的和之前配置是一样的。


/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这个权限才回显示标签内的信息。


更多的标签可以查看官网:传送门


整体测试



这是我的测试数据。


首先来验证一下登录:


先输入一个错误的账号和密码:



1.gif


接下来输入一个正确的:



2.gif


可以看到我登录的用户是crossoverJie他是有admin的角色,并且拥有user:*(ps:系统数据详见上面的数据库截图)的权限,所以在这里:


这是admin角色登录:
    有user:create权限信息


是能显示出标签内的信息,并把用户信息也显示出来了。


接着我们来访问一下/student这个请求,因为在Spring的配置文件中:


/loginAdmin=anon
                /admin*=authc
                /student=roles[teacher]
                /teacher=perms["user:create"]


只有teacher角色才能访问/student这个请求的:



3.gif


果然,Shiro做了安全控制是不能进行访问的。


然后我们换aaa用户登录,他正好是teacher角色,看能不能访问/student


4.gif


果然是能访问的。


因为我在控制器里访问/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…

个人博客地址:crossoverjie.top

GitHub地址:github.com/crossoverJi…


相关文章
SSM如何整合Shiro实现权限登陆案例
SSM如何整合Shiro实现权限登陆案例
64 0
|
Java 数据安全/隐私保护
基于SSM+Shiro+Bootstrap实现用户权限管理系统
基于SSM+Shiro+Bootstrap实现用户权限管理系统
212 0
基于SSM+Shiro+Bootstrap实现用户权限管理系统
|
SQL 安全 Java
SSM(三)Shiro 使用详解(上)
相比有做过企业级开发的童鞋应该都有做过权限安全之类的功能吧,最先开始我采用的是建用户表,角色表,权限表,之后在拦截器中对每一个请求进行拦截,再到数据库中进行查询看当前用户是否有该权限,这样的设计能满足大多数中小型系统的需求。不过这篇所介绍的Shiro能满足之前的所有需求,并且使用简单,安全性高,而且现在越来越的多企业都在使用Shiro,这应该是一个收入的你的技能库。
|
缓存 前端开发 数据库
SSM整合Shiro实现RBAC(八)下
SSM整合Shiro实现RBAC(八)
150 0
SSM整合Shiro实现RBAC(八)下
|
XML 前端开发 Java
SSM整合Shiro实现RBAC(八)上
SSM整合Shiro实现RBAC(八)
149 0
SSM整合Shiro实现RBAC(八)上
|
缓存 Java 数据安全/隐私保护
SSM整合Shiro实现RBAC(八)中
SSM整合Shiro实现RBAC(八)
|
JavaScript 前端开发 Java
基于vue(element ui) + ssm + shiro 的权限框架
随着前后端分离项目的热潮,前端各大框架的,前后端沟通部分也成了问题,之前服务端渲染的页面生成到前端来,现在前后端可能是两个服务器,一些技术的迁移,本框架的权限部分的设计思想,借鉴了前端大牛的想法,也有传统后端的设计方案,抛砖引玉,做个桥梁,实现前后端分离的权限的设计,代码仅供参考,思路仅供参考,相信优秀的你写自己的代码,用自己的思想会更为贴切,方便。
4719 0
|
数据安全/隐私保护 数据格式 XML
JavaWeb项目:Shiro实现简单的权限控制(整合SSM)
JavaWeb项目:Shiro实现简单的权限控制(整合SSM) 数据库表格相关设计 表格设计得比较简单,导航栏直接由角色表auth_role的角色描述vRoleDesc(父结点)和角色相关权限中的权限描述(标记为导航结点)vPermissionDesc(展开子项)组成。
4636 0
|
Java 应用服务中间件 数据库
分布式框架简介SSM组合+ springmvc+mybatis+shiro+restful+bootstrap
分布式框架简介SSM组合+ springmvc+mybatis+shiro+restful+bootstrap
5492 0
|
Web App开发 Java 测试技术
shiro与SSM项目整合
shiro于SSM整合所有的jar包 web.xml中配置shiro的filter 在web系统中,shiro也通过filter进行拦截。filter拦截后将操作权交给spring中配置的filterChain(过虑链儿) shiro提供很多filter。 applicationContext-shiro.xml 在applicationContext-
4180 0