zoukankan      html  css  js  c++  java
  • Shiro学习笔记四(Shiro集成WEB)

      这两天由于家里出了点事情,没有准时的进行学习。今天补上之前的笔记

            -----没有学不会的技术,只有不停找借口的人

    学习到的知识点:

      1.Shiro 集成WEB

      2.基于角色的权限控制

      3.基于权限的控制

    工程目录结构

    下面先是两个Servlet的内容

    1.AdminServlet的内容

    package com.zuoyan.shiro.servlet;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class AdminServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            System.out.println("amdin doGet");
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            System.out.println("admin doPost");
        }
    
    }

    2.LoginServlet中的内容

    package com.zuoyan.shiro.servlet;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.shiro.SecurityUtils;
    import org.apache.shiro.authc.UsernamePasswordToken;
    import org.apache.shiro.subject.Subject;
    
    
    public class LoginServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("login Request get!");
            request.getRequestDispatcher("login.jsp").forward(request, response);
            
            
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("login dopost");
            String userName=request.getParameter("userName");
            String password=request.getParameter("password");
            Subject subject=SecurityUtils.getSubject();
            UsernamePasswordToken token=new UsernamePasswordToken(userName, password);
            try{
                subject.login(token);    
                response.sendRedirect("success.jsp");
            }catch(Exception e){
                e.printStackTrace();
                request.setAttribute("errorInfo", "用户名或者密码错误");
                request.getRequestDispatcher("login.jsp").forward(request, response);
            }
            
        }
    
    }

    解释说明一下,这个就是登录的请求,如果登录成功就跳转到success.jsp页面上,如果登录不成功的话,转发的登录界面上  其中使用了Shrio的身份认证!

    login.jsp 中的内容就是一个简单的表单提交   提交的地址是login   这个就LoginServlet在这里处理登录请求

    3.下面是Shiro.ini 中的内容

    [main]
    authc.loginUrl=/login
    roles.unauthorizedUrl=/unauthorized.jsp
    perms.unauthorizedUrl=/unauthorized.jsp
    [users]
    java1234=123456,admin
    jack=123,teacher
    zuoyan=zuoyan123
    [roles]
    admin=user:*
    teacher=student:*
    [urls]
    /login=anon
    /admin=authc
    /student=roles[teacher]
    /teacher=perms["user:create"]

    3.1:  authc.loginUrl=/login 进行认证的地址,跳转到LoginServlet处理,然后username和password都为空,认证不通过,就跳转到登录界面

             roles.unauthorizedUrl=/unauthorized.jsp  这个是角色权限认证没通过跳转的地址

        perms.unauthorizedUrl=unauthorized.jsp  这个是权限认证没有通过 而跳转的界面

        [users] :这个是用户的的说明

        java1234=123456,admin  这个是设置了账号,还设置了用户的角色

        [roles]

        admin=user:*

        teacher=student:*

        [urls]

        /login=anon  这个就是匿名也可以访问

        /admin=authc  这个是需要认证身份的

        /student=roles[teacher] 这个是需要老师身份的才能访问

        teacher=perms["user:create"] 这个是需要拥有user:create 的权限,才可以操作

    web.xml文件的配置  监听shiro  和配置shiro的支持, 还有配置两个Servlet

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>ShrioWeb</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
      </welcome-file-list>
      
      <listener>
            <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
      </listener>
       
        <!-- 添加shiro支持 -->
        <filter>
            <filter-name>ShiroFilter</filter-name>
            <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
        </filter>
        
        <filter-mapping>
            <filter-name>ShiroFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        
        
        <servlet>
            <servlet-name>loginServlet</servlet-name>
            <servlet-class>com.java1234.servlet.LoginServlet</servlet-class>
        </servlet>
        
        <servlet-mapping>
            <servlet-name>loginServlet</servlet-name>
            <url-pattern>/login</url-pattern>
        </servlet-mapping>
        
        <servlet>
            <servlet-name>adminServlet</servlet-name>
            <servlet-class>com.java1234.servlet.AdminServlet</servlet-class>
        </servlet>
        
        <servlet-mapping>
            <servlet-name>adminServlet</servlet-name>
            <url-pattern>/admin</url-pattern>
        </servlet-mapping>
    </web-app>

    测试效果,简单说明,如果用户没有登录  运行项目

    项目正常的跑起来了

    然后访问   http://localhost:8080/ShiroWeb/admin

    就会跳转到登录的界面

    使用这个账号进行登录

     这个是成功登录的效果

    然后进行角色测试  访问http://localhost:8080/ShiroWeb/student   我使用的zuoyan这个账号仅仅拥有 admin的角色  而访问student这个需要的是teacher的角色

    这个是出现的效果,如果给zuoyan加上teacher的这个角色那么认证就会通过

    如果访问

    如果访问这个,zuoyan就会认证通过的  因为他是admin角色,而admin的角色拥有对user的一切权限

     这个样就是基于角色和权限的控制!

  • 相关阅读:
    BZOJ3697: 采药人的路径
    解题:WC 2007 石头剪刀布
    解题:CQOI 2017 老C的方块
    解题:洛谷4314 CPU监控
    解题:CQOI 2017 老C的任务
    解题:CF1009 Dominant Indices
    解题:CF570D Tree Requests
    解题:APIO 2012 派遣
    解题:ZJOI 2015 幻想乡战略游戏
    解题:洛谷4178 Tree
  • 原文地址:https://www.cnblogs.com/kangxinxin/p/7954014.html
Copyright © 2011-2022 走看看