前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shiro学习笔记四(Shiro集成WEB)

Shiro学习笔记四(Shiro集成WEB)

作者头像
梅花
发布2020-09-28 16:03:17
4440
发布2020-09-28 16:03:17
举报
文章被收录于专栏:梅花的学习记录

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

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

学习到的知识点:

  1.Shiro 集成WEB

  2.基于角色的权限控制

  3.基于权限的控制

工程目录结构

下面先是两个Servlet的内容

1.AdminServlet的内容

代码语言:javascript
复制
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中的内容

代码语言:javascript
复制
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 中的内容

代码语言:javascript
复制
[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

代码语言:javascript
复制
<?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的一切权限

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-12-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档