【Shiro】第四章 Web项目集成Shiro(二)

简介: 【Shiro】第四章 Web项目集成Shiro(二)

【3】编写LoginService

1. package com.itheima.shiro.service;
2. 
3. import org.apache.shiro.authc.UsernamePasswordToken;
4. 
5. import java.lang.management.LockInfo;
6. 
7. /**
8.  * @Description:登录服务
9.  */
10. public interface LoginService {
11. 
12. /**
13.      * @Description 登录方法
14.      * @param token 登录对象
15.      * @return
16.      */
17. boolean login(UsernamePasswordToken token);
18. 
19. /**
20.      * @Description 登出方法
21.      */
22. void logout();
23. }
1. package com.itheima.shiro.service.impl;
2. 
3. import com.itheima.shiro.service.LoginService;
4. import org.apache.shiro.SecurityUtils;
5. import org.apache.shiro.authc.UsernamePasswordToken;
6. import org.apache.shiro.subject.Subject;
7. 
8. 
9. /**
10.  * @Description:登录服务
11.  */
12. public class LoginServiceImpl implements LoginService {
13. 
14. @Override
15. public boolean login(UsernamePasswordToken token) {
16. Subject subject = SecurityUtils.getSubject();
17. try {
18.             subject.login(token);
19.         }catch (Exception e){
20. return false;
21.         }
22. return subject.isAuthenticated();
23.     }
24. 
25. @Override
26. public void logout() {
27. Subject subject = SecurityUtils.getSubject();
28.         subject.logout();
29.     }
30. }

【4】编写SecurityServiceImpl

1. package com.itheima.shiro.service.impl;
2. 
3. import com.itheima.shiro.service.SecurityService;
4. 
5. import java.util.ArrayList;
6. import java.util.HashMap;
7. import java.util.List;
8. import java.util.Map;
9. 
10. /**
11.  * @Description:权限服务层
12.  */
13. public class SecurityServiceImpl implements SecurityService {
14. 
15. @Override
16. public Map<String,String> findPasswordByLoginName(String loginName) {
17. return DigestsUtil.entryptPassword("123");
18. return map;
19.     }
20. 
21. @Override
22. public List<String> findRoleByloginName(String loginName) {
23.         List<String> list = new ArrayList<>();
24. if ("admin".equals(loginName)){
25.             list.add("admin");
26.         }
27.         list.add("dev");
28. return list;
29.     }
30. 
31. @Override
32. public List<String>  findPermissionByloginName(String loginName) {
33.         List<String> list = new ArrayList<>();
34. if ("jay".equals(loginName)){
35.             list.add("order:list");
36.             list.add("order:add");
37.             list.add("order:del");
38.         }
39. return list;
40.     }
41. }

【5】添加web层内容

【5.1】LoginServlet
1. package com.itheima.shiro.web;
2. 
3. import com.itheima.shiro.service.LoginService;
4. import com.itheima.shiro.service.impl.LoginServiceImpl;
5. import org.apache.shiro.authc.UsernamePasswordToken;
6. 
7. import javax.servlet.ServletException;
8. import javax.servlet.annotation.WebServlet;
9. import javax.servlet.http.HttpServlet;
10. import javax.servlet.http.HttpServletRequest;
11. import javax.servlet.http.HttpServletResponse;
12. import java.io.IOException;
13. 
14. /**
15.  * @Description:登录方法
16.  */
17. @WebServlet(urlPatterns = "/login")
18. public class LoginServlet extends HttpServlet {
19. 
20. @Override
21. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
22. throws ServletException, IOException {
23.         doPost(req, resp);
24.     }
25. 
26. @Override
27. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
28. throws ServletException, IOException {
29. //获取输入的帐号密码
30. String username = req.getParameter("loginName");
31. String password = req.getParameter("password");
32. //封装用户数据,成为Shiro能认识的token标识
33. UsernamePasswordToken token = new UsernamePasswordToken(username, password);
34. LoginService loginService = new LoginServiceImpl();
35. //将封装用户信息的token进行验证
36. boolean isLoginSuccess = loginService.login(token);
37. if (!isLoginSuccess) {
38. //重定向到未登录成功页面
39.             resp.sendRedirect("login.jsp");
40. return;
41.         }
42.         req.getRequestDispatcher("/home").forward(req, resp);
43.     }
44. 
45. }
【5.2】HomeServlet
1. package com.itheima.shiro.web;
2. 
3. import javax.servlet.ServletException;
4. import javax.servlet.annotation.WebServlet;
5. import javax.servlet.http.HttpServlet;
6. import javax.servlet.http.HttpServletRequest;
7. import javax.servlet.http.HttpServletResponse;
8. import java.io.IOException;
9. 
10. /**
11.  * @Description:系统home页面
12.  */
13. @WebServlet(urlPatterns = "/home")
14. public class HomeServlet extends HttpServlet {
15. 
16. @Override
17. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
18. throws ServletException, IOException {
19.         doPost(req, resp);
20.     }
21. 
22. @Override
23. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
24. throws ServletException, IOException {
25.         req.getRequestDispatcher("home.jsp").forward(req, resp);
26.     }
27. }
【5.3】OrderAddServlet
1. package com.itheima.shiro.web;
2. 
3. import com.itheima.shiro.service.LoginService;
4. import com.itheima.shiro.service.impl.LoginServiceImpl;
5. import org.apache.shiro.authc.UsernamePasswordToken;
6. 
7. import javax.servlet.ServletException;
8. import javax.servlet.annotation.WebServlet;
9. import javax.servlet.http.HttpServlet;
10. import javax.servlet.http.HttpServletRequest;
11. import javax.servlet.http.HttpServletResponse;
12. import java.io.IOException;
13. 
14. /**
15.  * @Description:添加页码
16.  */
17. @WebServlet(urlPatterns = "/order-add")
18. public class OrderAddServlet extends HttpServlet {
19. 
20. @Override
21. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
22. throws ServletException, IOException {
23.         doPost(req, resp);
24.     }
25. 
26. @Override
27. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
28. throws ServletException, IOException {
29.         req.getRequestDispatcher("order-add.jsp").forward(req, resp);
30.     }
31. 
32. }
【5.4】OrderListServlet
1. package com.itheima.shiro.web;
2. 
3. import com.itheima.shiro.service.LoginService;
4. import com.itheima.shiro.service.impl.LoginServiceImpl;
5. import org.apache.shiro.authc.UsernamePasswordToken;
6. 
7. import javax.servlet.ServletException;
8. import javax.servlet.annotation.WebServlet;
9. import javax.servlet.http.HttpServlet;
10. import javax.servlet.http.HttpServletRequest;
11. import javax.servlet.http.HttpServletResponse;
12. import java.io.IOException;
13. 
14. /**
15.  * @Description:订单列表
16.  */
17. @WebServlet(urlPatterns = "/order-list")
18. public class OrderListServlet extends HttpServlet {
19. 
20. @Override
21. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
22. throws ServletException, IOException {
23.         doPost(req, resp);
24.     }
25. 
26. @Override
27. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
28. throws ServletException, IOException {
29.         req.getRequestDispatcher("order-list.jsp").forward(req, resp);
30.     }
31. }
【5.5】LogoutServlet
1. package com.itheima.shiro.web;
2. 
3. import com.itheima.shiro.service.LoginService;
4. import com.itheima.shiro.service.impl.LoginServiceImpl;
5. import org.apache.shiro.authc.UsernamePasswordToken;
6. 
7. import javax.servlet.ServletException;
8. import javax.servlet.annotation.WebServlet;
9. import javax.servlet.http.HttpServlet;
10. import javax.servlet.http.HttpServletRequest;
11. import javax.servlet.http.HttpServletResponse;
12. import java.io.IOException;
13. 
14. /**
15.  * @Description:登出
16.  */
17. @WebServlet(urlPatterns = "/logout")
18. public class LogoutServlet extends HttpServlet {
19. 
20. @Override
21. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
22. throws ServletException, IOException {
23.         doPost(req, resp);
24.     }
25. 
26. @Override
27. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
28. throws ServletException, IOException {
29. LoginService loginService = new LoginServiceImpl();
30.         loginService.logout();
31.     }
32. 
33. }

【6】添加JSP

login.jsp登录页面

1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
2. <html>
3. <head>
4.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5.     <title>Title</title>
6. </head>
7. <body>
8. <form method="post" action="${pageContext.request.contextPath}/login">
9.     <table>
10.         <tr>
11.             <th>登陆名称</th>
12.             <td><input type="text"  name="loginName"></td>
13.         </tr>
14.         <tr>
15.             <th>密码</th>
16.             <td><input type="password" name="password"></td>
17.         </tr>
18.         <tr>
19.             <td colspan="2">
20.                 <input type="submit" value="提交"/>
21.             </td>
22.         </tr>
23.     </table>
24. 
25. </form>
26. </body>
27. </html>

home.jsp系统页

1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
2. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
3. <html>
4. <head>
5.     <title></title>
6. </head>
7. <body>
8. <h6>
9.     <a href="${pageContext.request.contextPath}/logout">退出</a>
10.     <a href="${pageContext.request.contextPath}/order-list">列表</a>
11.     <a href="${pageContext.request.contextPath}/order-add">添加</a>
12. </h6>
13. </body>
14. </html>

order-add.jsp订单添加(伪代码)

1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
2. <html>
3. <head>
4.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5.     <title>Title</title>
6. </head>
7. <body>
8. 添加页面
9. </body>
10. </html>

order-list.jsp订单列表

1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
2. <%--导入jstl标签库--%>
3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
4. <html>
5. <head>
6.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7.     <title>用户列表jsp页面</title>
8.     <style>
9.         table {border:1px solid #000000}
10.         table th{border:1px solid #000000}
11.         table td{border:1px solid #000000}
12.     </style>
13. 
14. </head>
15. <body>
16. <table cellpadding="0" cellspacing="0" width="80%">
17.     <tr>
18.         <th>编号</th>
19.         <th>公司名称</th>
20.         <th>信息来源</th>
21.         <th>所属行业</th>
22.         <th>级别</th>
23.         <th>联系地址</th>
24.         <th>联系电话</th>
25.     </tr>
26.     <tr>
27.         <td>1</td>
28.         <td>传智播客</td>
29.         <td>网络营销</td>
30.         <td>互联网</td>
31.         <td>普通客户</td>
32.         <td>津安创意园</td>
33.         <td>0208888887</td>
34.     </tr>
35.     <tr>
36.         <td>2</td>
37.         <td>黑马程序员</td>
38.         <td>j2ee</td>
39.         <td>互联网</td>
40.         <td>VIP客户</td>
41.         <td>津安创意园</td>
42.         <td>0208888887</td>
43.     </tr>
44.     <tr>
45.         <td>3</td>
46.         <td>黑马程序员</td>
47.         <td>大数据</td>
48.         <td>互联网</td>
49.         <td>VIP客户</td>
50.         <td>津安创意园</td>
51.         <td>0208888887</td>
52.     </tr>
53. </table>
54. </body>
55. 
56. </html>
相关文章
|
8月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
767 1
|
9月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
1020 64
|
8月前
|
安全 Java 数据库
SpringSecurity认证授权及项目集成
本文介绍了基于Spring Security的权限管理框架,涵盖认证、授权与鉴权核心概念,通过快速入门示例演示集成流程,并结合数据库实现用户认证。进一步扩展实现正常登录,JWT登录及鉴权管理器,实现灵活的安全控制,适用于前后端分离项目中的权限设计与实践。
724 4
|
8月前
|
资源调度 JavaScript 前端开发
在Vue 3项目中集成Element Plus组件库的步骤
总结起来,在集成过程当中我们关注于库本身提供功能与特性、环境搭建与依赖管理、模块化编程思想以及前端工程化等方面知识点;同时也涵盖前端性能优化(比如上文提及“按需加载”)与定制化开发(例如“自定义主题”)等高级话题.
816 16
|
10月前
|
JSON 分布式计算 大数据
springboot项目集成大数据第三方dolphinscheduler调度器
springboot项目集成大数据第三方dolphinscheduler调度器
680 3
|
10月前
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
995 2
|
10月前
|
安全 JavaScript Java
java Web 项目完整案例实操指南包含从搭建到部署的详细步骤及热门长尾关键词解析的实操指南
本项目为一个完整的JavaWeb应用案例,采用Spring Boot 3、Vue 3、MySQL、Redis等最新技术栈,涵盖前后端分离架构设计、RESTful API开发、JWT安全认证、Docker容器化部署等内容,适合掌握企业级Web项目全流程开发与部署。
872 0
|
7月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
600 4
|
11月前
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
11月前
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。

热门文章

最新文章