Shiro 学习笔记(7)—— Shiro 集成 Web
来源:互联网 发布:上海知柚公司官网图片 编辑:程序博客网 时间:2024/05/16 15:35
这一节介绍了在 Web 项目中使用 Shiro 的步骤。
- Shiro 学习笔记7 Shiro 集成 Web
- 步骤1在 webxml 部署描述符中配置 Shiro
- 步骤2配置 shiroini
- 步骤3编写登录认证的代码
Shiro 学习笔记(7)—— Shiro 集成 Web
在 Web 环境下集成 Shiro 其实不难,按照官方文本的说明实现就可以了。更多地,我们会在 Spring 的 Web 环境中使用 Shiro ,这个我们后面再讲。
参考 Shiro 官方文档中集成 Web 的这个章节:http://shiro.apache.org/webapp-tutorial.html。
项目源码下载:https://github.com/weimingge14/Shiro-Web
步骤1:在 web.xml 部署描述符中配置 Shiro。
<listener> <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class></listener><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> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher></filter-mapping>
步骤2:配置 shiro.ini
默认的情况下,Shiro 使用的核心配置文件就是在 WEB-INF/classes 根路径下的 shiro.ini 。如果你使用的是 Maven 或者 Gradle 构建,可以把 shiro.ini 文件放在 resources 目录下。
下面这个配置文件,我都详细地写了每一项配置的说明。
[main]# 身份认证不通过的用户,Shiro 会帮助跳转(Get)到一个地址# 这个地址只能是站内的一个地址authc.loginUrl=/login# 在身份认证成功的前提下,用户不具有相应的角色,跳转(Get)到下面这个链接roles.unauthorizedUrl=/unauthorized-noRole.jsp# 在身份认证成功的前提下,用户不具有相应的权限,跳转(Get)到下面这个链接perms.unauthorizedUrl=/unauthorized-noPermission.jsp[users]# 用户 liwei 具有角色 adminliwei=123456,adminzhouguang=666666,teacheryuanlian=888888lirui=999999[roles]# admin 角色的定义admin=user:*# teacher 角色的定义teacher=student:*[urls]# 访问 /login 不须要身份认证/login=anon# 访问 /admin 须要身份认证/admin=authc# 访问 /student 不仅须要身份认证,而且还要具有角色 teacher/student=roles[teacher]# 访问 /teacher 不仅须要身份认证,而且还要具有权限 "user:create"/teacher=perms["user:create"]
步骤3:编写登录认证的代码
以前我们写的测试代码中有一句 SecurityUtil.setSecurityManager(securityManager)
,在 Web 集成了 Shiro 以后,我们不用写这一句,就可以完成认证的操作。
以下是示例代码。
@WebServlet(name = "LoginServlet",urlPatterns = {"/login"})public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("login post"); String userName =request.getParameter("userName"); String password =request.getParameter("password"); // 因为 SecurityUtil.setSecurityManager(securityManager) // 这件事情都交给了 web.xml 配置的监听器来完成了,所以这里不用写了 Subject currentUser = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken(userName,password,"xx"); try { currentUser.login(token); // 登录成功以后重定向跳转到 success.jsp response.sendRedirect("success.jsp"); }catch (UnknownAccountException e){ e.printStackTrace(); System.out.println("无效的用户名"); request.setAttribute("errorInfo", "用户名错误"); request.getRequestDispatcher("login.jsp").forward(request, response); }catch (IncorrectCredentialsException e){ System.out.println("错误的密码"); request.setAttribute("errorInfo", "密码错误"); request.getRequestDispatcher("login.jsp").forward(request, response); }catch (AuthenticationException e) { e.printStackTrace(); request.setAttribute("errorInfo", "其它 AuthenticationException "); request.getRequestDispatcher("login.jsp").forward(request, response); } // 这里不能用 currentUser.logout(); 否则每次进来都要验证 // currentUser.logout(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("login get"); request.getRequestDispatcher("login.jsp").forward(request, response); }}
其实这个时候项目的大题框架已经建好了,后面再有就是一些页面的设置,在这里就不多展示代码,占用文章篇幅了,大家可以下载我的代码,在本地跑起来自己测试一下。最最核心的是要理解 shiro.ini 这个核心配置文件每一项的意义,然后进行相应的测试。
0 0
- Shiro 学习笔记(7)—— Shiro 集成 Web
- Shiro学习笔记(5)——web集成
- Shiro学习总结(10)——Spring集成Shiro
- java安全框架-Shiro学习笔记(五)-Shiro集成Web
- shiro入门实战笔记(7)--Web集成
- Shiro学习笔记(1)——shiro入门
- Shiro学习笔记(6)——shiro缓存
- shiro学习-shiro集成cas
- Shiro学习(20)无状态Web应用集成
- Shiro学习(20)无状态Web应用集成
- shiro学习之路(5)------集成Web
- shiro(三)shiro实战——Spring 集成 Shiro(案例)
- Shiro集成Web
- 【shiro】--- 集成web
- 【shiro】shiro学习笔记1-shiro初识
- Shiro学习(7)与Web整合
- Shiro学习(7)与Web整合
- 【Shiro】Apache Shiro架构之集成web
- Shiro 学习笔记(6)—— 加密
- 《ROS精品入门》学习笔记二:ROS基础
- (十一)c52学习之旅-动态数码管
- 《你可以不平凡》-- 周杰伦在北京大学百年讲堂的演讲
- CTF训练营-牛刀小试-ASCII码而已
- Shiro 学习笔记(7)—— Shiro 集成 Web
- Wildcard Matching
- 局域网如何检测电脑是否遭受ARP攻击
- 【Android】详解7.0带来的新工具类:DiffUtil
- 安卓实现在线更新
- Java----socket网络编程
- IOI2014 假期(Holiday)
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- 第3周项目2-建设“顺序表”算法库