zoukankan      html  css  js  c++  java
  • Shiro安全框架之集成 Web(中)


    一、Url配置方式
    Url 匹配方式
    ? 匹配一个字符 /admin? 可以匹配/admin1 /admin2 但是不能匹配/admin12 /admin
    * 匹配零个或者一个或者多个字符 /admin* 可以匹配 /admin /admin1 /admin12 但是不能匹配/admin/abc
    ** 匹配零个或者多个路径 /admin/** 可以匹配/admin /admin/a /admin/a/b

    [urls]
    /login=anon
    /admin=authc
    /student=roles[teacher]
    /teacher=perms["user:create"]

    1、在admin后加个?表示可以匹配/admin1 /admin2

    /admin?=authc

    测试
    请求http://localhost:8080/ShiroWeb/admin1或admin2
    跳转到login.jsp,但请求admin 不匹配

    2、在admin后加个*表示可以匹配/admin /admin1 /admin12 但是不能匹配/admin/abc
    /admin*=authc
    请求http://localhost:8080/ShiroWeb/admin1或admin2或admin 或admin12都可以
    跳转到login.jsp

    3、/**与**是一样的

    二、Shiro标签的使用
    举几个jsp标签授权例子
    先附上ini配置文件

    [main]
    authc.loginUrl=/login
    roles.unauthorizedUrl=/unauthorized.jsp
    perms.unauthorizedUrl=/unauthorized.jsp
    [users]
    Robin=123456,admin
    jack=123,teacher
    Tom=234
    Li=345
    [roles]
    admin=user:*
    teacher=student:*
    [urls]
    /login=anon
    /admin=authc
    /student=roles[teacher]
    /teacher=perms["user:create"]

    使用标签要先引入 <%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>

    1.hasRole 标签 如果当前 Subject 有角色将显示 body 体内容。
    在success.jsp添加

    <Shiro:hasRole name="admin">
        欢迎有admin角色的用户
    </Shiro:hasRole>

    测试一下 输入http://localhost:8080/ShiroWeb/admin。跳到登录页面,先输入用户名

    Tom 234 因为Tom 没有admin角色 所以显示结果如下 为空


     
    换成有admin角色的 Robin 123456 登录 显示结果如下 显示Body体的内容
     

    2、hasPermission 标签 如果当前 Subject 有权限将显示 body 体内容。
    在success.jsp 添加

    <shiro:hasPermission name="student:create">
     欢迎有student:create权限的用户!<shiro:principal/>
    </shiro:hasPermission>

    测试:输入http://localhost:8080/ShiroWeb/login 登录有student:create权限的用户,

    在ini中查找teacher角色有student所有权限,jack用户有teacher角色(jack是老师)
    所以用户名 密码输入jack 123 显示结果如下


     
    3、标签体内汉字后带<shiro:principal/> 可以显示显示登录的用户名 如1 2 中的Robin和jack
    4、剩下的jsp标签不一一演示了。

    三、Shiro会话机制
    官方:Shiro-web jar包的org.apache.shiro.web.session.mgt包下的ServletContainerSessionManage.class 类
    1、在LoginServlet.java下新加如下代码
     

    // 当subject当前用户登录成功后

    // 就可以用subject获取session,这个session是shiro实现的和servlet的session是一样的
    //通过session可以获取id 主机地址 和session的有效期
    测试后台输出如下,获取的主机ip为虚拟的  session时间为1800000毫秒
     

    2、在LoginServlet.java继续添加代码如下

    //session里是可以放信息的

     

    将 session的数据,存放到session对象info中
    到前台success.jsp中取一下后台session存放的信息,用el表达式取一下
     

    测试结果如下

    本博客为博主的学习笔记,不作任何商业用途。
  • 相关阅读:
    蓝牙遥控小车设计(二)——车体搭建和利用串口遥控小车
    WIN7下使用sublime text3替代arduino IDE(安装方法和所遇到的问题)
    在使用Arduino中遇到的问题(无法使用中文注释、程序无法下载)
    python 任务调度模块sched
    使用__all__限制模块可被导入对象
    python判断任务是CPU密集型还是IO密集型
    使用__slots__限制实例的属性
    使用装饰器获取被调用函数的执行的时间
    python上下文管理器
    http协议以及http1.0和http1.1的区别
  • 原文地址:https://www.cnblogs.com/guo7533/p/8784357.html
Copyright © 2011-2022 走看看