关于身份认证、角色认证和权限认证的shiro-web例子
2021-06-19 18:05
标签: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文件 web.xml文件 shiro.inn文件 loginServlet.java studentServlet.java 关于身份认证、角色认证和权限认证的shiro-web例子 标签:ping util forward 认证通过 esc cep redirect creat listen 原文地址:http://www.cnblogs.com/jedjia/p/Shiro-authc-authz.html 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>
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>
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"]
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 }
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 }
上一篇:PHP基础知识总
下一篇:mac os重装php
文章标题:关于身份认证、角色认证和权限认证的shiro-web例子
文章链接:http://soscw.com/essay/96066.html