关于身份认证、角色认证和权限认证的shiro-web例子

2021-06-19 18:05

阅读:348

标签:ping   util   forward   认证通过   esc   cep   redirect   creat   listen   

      shiro是Java的一个安全框架,其中认证、授权也是其核心知识。下面以一个maven构建的运用shiro框架的Web项目示例进行

分析和讲解,来理解shiro关于身份认证、和角色认证及权限认证的处理过程。

     一、shiro集成web项目需配置的地方

           说明:在进行如下配置之前,需建立maven管理的web项目(参考创建maven管理的web项目)。这里不再赘述。

          1、pom.xml文件添加shiro依赖的jar包

               技术分享

     2、web.xml配置添加 初始化shiro环境配置

               技术分享

          3、shiro.ini配置

              技术分享

             

    二、查看演示结果及分析

          分以下几种情况进行演示

          1、请求登录页面,无需权限验证(不然,一直在进行死循环)

                http://localhost:8080/shiroWeb/login

          2、请求admin页面,需身份认证,跳转到登录页面。

               http://localhost:8080/shiroWeb/admin

              用户登入,进行身份验证之后,后台会记录session,下次在请求admin页面,即可直接访问admin页面。

         3、请求student页面,需身份认证和角色认证。

             http://localhost:8080/shiroWeb/student

             用户登入后,进行身份认证,身份认证通过后,还需进行角色认证,角色认证通过,才能访问student页面。

             否则,还是无权限。

             角色认证通过(该用户拥有改角色):

            技术分享

             角色认证不通过(该用户不具有该角色):

             技术分享

         4、请求teacher页面,需身份认证和角色认证及权限认证。 

              http://localhost:8080/shiroWeb/teacher

             用户登入后,进行身份认证,身份认证通过后,还需进行角色认证,角色认证通过,还需进行权限认证,权限认证通过,才能访问teacher页面。

             否则,还是无权限。

             权限认证不通过(拥有该角色的用户没有操作创建用户的权限或者,没有分配任何角色的用户):

           技术分享

             权限认证通过(拥有该角色的用户有操作创建用户的权限):

             技术分享

          分析:判断是否具有请求某个页面的操作,首先需进行身份认证(登录页面除外),身份认证(authc)通过后,有需要进行授权认证的,还需再验证是否需角色权限(roles)认证。

                    角色权限认证通过后,有需要进行资源权限认证的,还需进行资源操作权限(perms)认证 。层次递进,具体还需看如何配置,及平台如何分配。

                   业务理解: 用户分配某个角色,某个角色具有操作某块资源的权限。

 

     三、附上部分代码供参考:

        pom.xml文件    

技术分享技术分享
 1 project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 3   modelVersion>4.0.0modelVersion>
 4   groupId>com.hik.shirogroupId>
 5   artifactId>shiroWebartifactId>
 6   packaging>warpackaging>
 7   version>0.0.1-SNAPSHOTversion>
 8   name>shiroWeb Maven Webappname>
 9   url>http://maven.apache.orgurl>
10   dependencies>
11     dependency>
12       groupId>junitgroupId>
13       artifactId>junitartifactId>
14       version>4.8.1version>
15       scope>testscope>
16     dependency>
17     
18     
19     dependency>
20         groupId>javax.servletgroupId>
21         artifactId>javax.servlet-apiartifactId>
22         version>3.1.0version>
23         scope>providedscope>
24     dependency>
25     dependency>
26         groupId>javax.servlet.jspgroupId>
27         artifactId>javax.servlet.jsp-apiartifactId>
28         version>2.3.1version>
29         scope>providedscope>
30     dependency>
31     
32     
33     dependency>
34         groupId>javax.servletgroupId>
35         artifactId>jstlartifactId>
36         version>1.2version>
37     dependency>
38     
39     
40     dependency>
41         groupId>log4jgroupId>
42         artifactId>log4jartifactId>
43         version>1.2.17version>
44     dependency>
45     dependency>
46         groupId>commons-logginggroupId>
47         artifactId>commons-loggingartifactId>
48         version>1.2version>
49     dependency>
50     
51     dependency>
52         groupId>org.apache.shirogroupId>
53         artifactId>shiro-coreartifactId>
54         version>1.4.0version>
55     dependency>
56     
57     
58     dependency>
59         groupId>org.apache.shirogroupId>
60         artifactId>shiro-webartifactId>
61         version>1.4.0version>
62     dependency>
63     
64     
65     dependency>
66         groupId>org.slf4jgroupId>
67         artifactId>slf4j-log4j12artifactId>
68         version>1.7.25version>
69     dependency>
70   dependencies>
71   build>
72     finalName>shiroWebfinalName>
73   build>
74 project>
View Code

     web.xml文件

技术分享技术分享
 1 xml version="1.0" encoding="UTF-8"?>
 2 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">
 3   display-name>TestWebdisplay-name>
 4   welcome-file-list>
 5     welcome-file>index.htmlwelcome-file>
 6     welcome-file>index.htmwelcome-file>
 7     welcome-file>index.jspwelcome-file>
 8     welcome-file>default.htmlwelcome-file>
 9     welcome-file>default.htmwelcome-file>
10     welcome-file>default.jspwelcome-file>
11   welcome-file-list>
12   
13   
14   listener>
15     listener-class>org.apache.shiro.web.env.EnvironmentLoaderListenerlistener-class>
16  listener>
17  filter>
18     filter-name>ShiroFilterfilter-name>
19     filter-class>org.apache.shiro.web.servlet.ShiroFilterfilter-class>
20  filter>
21 
22  filter-mapping>
23     filter-name>ShiroFilterfilter-name>
24     url-pattern>/*url-pattern>
25     dispatcher>REQUESTdispatcher>
26     dispatcher>FORWARDdispatcher>
27     dispatcher>INCLUDEdispatcher>
28     dispatcher>ERRORdispatcher>
29  filter-mapping>
30  
31  servlet>
32      servlet-name>loginServletservlet-name>
33      servlet-class>com.hik.servlet.LoginServletservlet-class>
34  servlet>
35  servlet-mapping>
36      servlet-name>loginServletservlet-name>
37      url-pattern>/loginurl-pattern>
38  servlet-mapping>
39  
40  servlet>
41      servlet-name>adminServletservlet-name>
42      servlet-class>com.hik.servlet.AdminServletservlet-class>
43  servlet>
44  servlet-mapping>
45      servlet-name>adminServletservlet-name>
46      url-pattern>/adminurl-pattern>
47  servlet-mapping>
48  
49  servlet>
50      servlet-name>studentServletservlet-name>
51      servlet-class>com.hik.servlet.StudentServletservlet-class>
52  servlet>
53  servlet-mapping>
54      servlet-name>studentServletservlet-name>
55      url-pattern>/studenturl-pattern>
56  servlet-mapping>
57  
58  servlet>
59      servlet-name>teacherServletservlet-name>
60      servlet-class>com.hik.servlet.TeacherServletservlet-class>
61  servlet>
62  servlet-mapping>
63      servlet-name>teacherServletservlet-name>
64      url-pattern>/teacherurl-pattern>
65  servlet-mapping>
66 web-app>
View Code

  shiro.inn文件        

技术分享技术分享
 1 [main]
 2 authc.loginUrl=/login.jsp
 3 roles.unauthorizedUrl=/unauthorized.jsp
 4 perms.unauthorizedUrl=/unauthorized.jsp
 5 [users]
 6 hik=123456,admin
 7 jack=123,teacher
 8 marry=234
 9 json=345
10 [roles]
11 admin=user:*
12 teacher=student:*
13 [urls]
14 /login=anon
15 /admin=authc
16 /student=authc,roles[teacher]
17 /teacher=perms["user:create"]
View Code

 loginServlet.java

技术分享技术分享
 1 /**
 2  * 
 3  */
 4 package com.hik.servlet;
 5 
 6 import java.io.IOException;
 7 
 8 import javax.servlet.ServletException;
 9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12 
13 import org.apache.shiro.SecurityUtils;
14 import org.apache.shiro.authc.UsernamePasswordToken;
15 import org.apache.shiro.subject.Subject;
16 import org.slf4j.Logger;
17 import org.slf4j.LoggerFactory;
18 
19 /**
20  * @ClassName: LoginServlet
21  * @Description: TODO
22  * @author jed
23  * @date 2017年7月16日下午12:29:16
24  *
25  */
26 public class LoginServlet extends HttpServlet{
27     
28     private static final Logger log = LoggerFactory.getLogger(LoginServlet.class); 
29 
30     /**
31      * 序列号
32      */
33     private static final long serialVersionUID = 1L;
34 
35     @Override
36     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
37         System.out.println("login doget");
38         log.info("login doget");
39         req.getRequestDispatcher("login.jsp").forward(req, resp);
40     }
41 
42     @Override
43     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
44         System.out.println("login dopost");
45         log.info("login dopost");
46         String userName = req.getParameter("userName");
47         String password = req.getParameter("password");
48         UsernamePasswordToken token = new UsernamePasswordToken(userName,password);
49         Subject subject = SecurityUtils.getSubject();
50         try{
51             subject.login(token);
52             resp.sendRedirect("success.jsp"); //重定向
53         }catch(Exception e){
54             log.error("登录失败", e);
55             req.setAttribute("errorInfo", "用户名或者密码错误");
56             req.getRequestDispatcher("login.jsp").forward(req, resp);//请求转发
57         }
58     }
59     
60     
61 
62 }
View Code

studentServlet.java

技术分享技术分享
 1 /**
 2  * 
 3  */
 4 package com.hik.servlet;
 5 
 6 import java.io.IOException;
 7 
 8 import javax.servlet.ServletException;
 9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12 
13 import org.apache.shiro.SecurityUtils;
14 import org.apache.shiro.authc.UsernamePasswordToken;
15 import org.apache.shiro.subject.Subject;
16 import org.slf4j.Logger;
17 import org.slf4j.LoggerFactory;
18 
19 /**
20  * @ClassName: LoginServlet
21  * @Description: TODO
22  * @author jed
23  * @date 2017年7月16日下午12:29:16
24  *
25  */
26 public class StudentServlet extends HttpServlet{
27     
28     private static final Logger log = LoggerFactory.getLogger(StudentServlet.class); 
29 
30     /**
31      * 序列号
32      */
33     private static final long serialVersionUID = 1L;
34 
35     @Override
36     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
37         System.out.println("student doget");
38         log.info("student doget");
39         req.getRequestDispatcher("student.jsp").forward(req, resp);
40     }
41 
42     @Override
43     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
44         System.out.println("student dopost");
45         log.info("student dopost");
46     }
47     
48     
49 
50 }
View Code

 

关于身份认证、角色认证和权限认证的shiro-web例子

标签:ping   util   forward   认证通过   esc   cep   redirect   creat   listen   

原文地址:http://www.cnblogs.com/jedjia/p/Shiro-authc-authz.html

上一篇:PHP基础知识总

下一篇:mac os重装php


评论


亲,登录后才可以留言!