Shiro安全框架(六)——Url匹配方式与Shiro标签使用与Session会话机制

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

2.Shiro标签使用
修改success.jsp页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    欢迎你!!!
    <!-- name:角色名称 -->
    <shiro:hasRole name="admin">
        欢迎有admin角色的用户!!!
    <%-- 角色名  --%>
    <shiro:principal/>
    </shiro:hasRole>

    <!-- name:角色名称 -->
    <shiro:hasRole name="user">
        欢迎有user角色的用户!!!
        <%-- 角色名  --%>
        <shiro:principal/>
    </shiro:hasRole>

    <!-- name:权限名称 -->
    <shiro:hasPermission name="admin:select">
        欢迎有admin:select权限的用户!!!
    <%-- 角色名  --%>
    <shiro:principal/>
    </shiro:hasPermission>

    <!-- name:权限名称 -->
    <shiro:hasPermission name="user:select">
        欢迎有user:select权限的用户!!!
        <%-- 角色名  --%>
        <shiro:principal/>
    </shiro:hasPermission>

Shiro.ini文件:

    [main]
    authc.loginUrl=/login
    roles.unauthorizedUrl=/unauthorized.jsp
    perms.unauthorizedUrl=/unauthorized.jsp
  	myRealm=com.project.muma.Realm.MyRealm
	securityManager.realms=$myRealm
    
    [urls]
    /login=anon
    /admin=authc
    /student=roles[user]
    /teacher=perms["admin:select"]

测试结果:
1、使用admin,123登录成功后,跳转页面。显示admin角色和admin角色所有的权限。
在这里插入图片描述
2、使用muma,123登录成功后,跳转页面。显示user角色和user角色所有的权限。
在这里插入图片描述
3、使用jack,123登录成功后,跳转页面。什么角色和权限都没有,什么都不显示。
在这里插入图片描述

3.Shiro实现session会话机制
修改LoginServlet

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//@WebServlet("/login")  也可以使用注解方式配置访问url  就不用在web.xml中配置<servlet>
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("login doget");
        req.getRequestDispatcher("login.jsp").forward(req, resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("login dopost");
        String userName=req.getParameter("userName");
        System.out.println("userName = " + userName);
        String password=req.getParameter("password");
        System.out.println("password = " + password);
        Subject subject= SecurityUtils.getSubject();
        UsernamePasswordToken token=new UsernamePasswordToken(userName, password);

        try{
            subject.login(token);
            Session session = subject.getSession();
            System.out.println("sessionId:"+session.getId());
            System.out.println("IP地址:"+session.getHost());
            System.out.println("session存活时间:"+session.getTimeout());
            //存储数据
            session.setAttribute("info", "session中存储的数据");
            resp.sendRedirect("success.jsp");
        }catch(Exception e){
            e.printStackTrace();
            req.setAttribute("errorInfo", "用户名或者密码错误");
            req.getRequestDispatcher("login.jsp").forward(req, resp);
        }
    }
}

在success.jsp页面上添加 ${info}
在这里插入图片描述
登陆测试:使用admin,123。
控制台输出:
在这里插入图片描述
success.jsp页面
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值