集成测试步骤:
1、准本一个shiro-web.ini文件
2、通过web.xml将shiro与web容器进行集成
3、编写servlet
4、测试
shiro-web.ini
[main] #定义身份认证失败后的请求url映射,loginUrl是身份认证过滤器中的一个属性 authc.loginUrl=/login #定义角色认证失败后的请求url映射,unauthorizedUrl是角色认证过滤器中的一个属性 roles.unauthorizedUrl=/unauthorized.jsp #定义权限认证失败后请求url映射,unauthorizedUrl是角色认证过滤器中的一个属性 perms.unauthorizedUrl=/unauthorized.jsp [users] zs=123,role1 ls=123,role2 ww=123,role3 zdm=123,admin [roles] role1=user:create role2=user:create,user:update role3=user:create,user:update,user:delete,user:view,user:load admin=user:* #定义请求的地址需要做什么验证 [urls] #请求login的时候不需要权限,游客身份即可(anon) /login.do=anon #请求/user/updatePwd.jsp的时候,需要身份认证(authc) /user/updatePwd.jsp=authc #请求/admin的时候,需要角色认证,必须是拥有admin角色的用户才行 /admin/*.jsp=roles[admin] #请求/teacher的时候,需要权限认证,必须是拥有user:create权限的角色的用户才行 /user/teacher.jsp=perms["user:update"]
web.xml配置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>Archetype Created Web Application</display-name> <context-param> <param-name>shiroConfigLocations</param-name> <param-value>classpath:shiro-web.ini</param-value> </context-param> <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> </filter-mapping> </web-app>
LoginServlet.java
package com.javaxl; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.subject.Subject; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author 小李飞刀 * @site www.javaxl.com * @company * @create 2019-10-10 11:47 */ @WebServlet("/login") public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); String password = req.getParameter("password"); UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(username, password); Subject subject = SecurityUtils.getSubject(); try { subject.login(usernamePasswordToken); req.getRequestDispatcher("main.jsp").forward(req, resp); } catch (Exception e) { req.setAttribute("message", "您的用户名密码输入有误!!!"); req.getRequestDispatcher("login.jsp").forward(req, resp); } } }
LogoutServlet.java
package com.javaxl; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.subject.Subject; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author 小李飞刀 * @site www.javaxl.com * @company * @create 2019-02-17 9:47 */ @WebServlet("/logout") public class LogoutServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Subject subject = SecurityUtils.getSubject(); subject.logout(); resp.sendRedirect(req.getContextPath()+"/login.jsp"); } }
JSP结构
main.jsp
导入前面准备好的jsp页面进行测试
测试一下几点
1、身份认证成功与失败的结果
2、角色认证成功与失败的结果
3、权限认证成功与失败的结果
运行结果
在不登陆的情况下只能访问login.jsp
zs用户登录只能看到个人密码修改界面
ls用户登录,比zs多看到老师简介界面
over......
备案号:湘ICP备19000029号
Copyright © 2018-2019 javaxl晓码阁 版权所有