旅游网站开发设计报告书医疗ppt模板下载免费完整版

news/2025/10/3 6:22:16/文章来源:
旅游网站开发设计报告书,医疗ppt模板下载免费完整版,小学生手工制作大全,wordpress无插件主题【7】测试【7.1】启动点击apply然后点击OK【7.2】登录过滤访问http://localhost:8080/platform/home的时候#xff0c;会被【7.3】角色过滤使用“admin”用户登录#xff0c;密码#xff1a;123根据SecurityServiceImpl我们可以知道使用admin账号登录成功之后#xff1a;此…【7】测试【7.1】启动点击apply然后点击OK【7.2】登录过滤访问http://localhost:8080/platform/home的时候会被【7.3】角色过滤使用“admin”用户登录密码123根据SecurityServiceImpl我们可以知道使用admin账号登录成功之后此时点击“列表”因为当前admin用户是有admin角色所有可以正常访问点击“添加”因为当前admin用户是没有order:add的资源所以回401【7.4】资源过滤点击“退出”使用“jay”用户登录密码为123点击“添加”因为SecurityServiceImpl中为jay用户添加如下的资源点击“添加”之后正常访问点击“列表”之后因为“jay”用户满意“admin”角色所以访问受限4、web项目授权前面我们学习了基于ini文件配置方式来完成授权下面我们来看下其他2种方式的授权【1】基于代码【1.1】登录相关【1.2】角色相关【1.3】资源相关【1.4】案例【1.4.1】创建项目拷贝shiro-day01-07web新建shiro-day01-08web-java【1.4.2】修改shiro.ini#声明自定义的realm且为安全管理器指定realms[main]definitionRealmcom.itheima.shiro.realm.DefinitionRealmsecurityManager.realms$definitionRealm#用户退出后跳转指定JSP页面logout.redirectUrl/login.jsp#若没有登录则被authc过滤器重定向到login.jsp页面authc.loginUrl /login.jsp[urls]/loginanon#发送/home请求需要先登录#/home authc#发送/order/list请求需要先登录#/order-list roles[admin]#提交代码需要order:add权限#/order-add perms[order:add]#更新代码需要order:del权限#/order-del perms[order:del]#发送退出请求则用退出过滤器/logout logout【1.4.3】登录相关修改HomeServlet的doPost方法package com.itheima.shiro.web;import org.apache.shiro.SecurityUtils;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;/** * Description系统home页面 */WebServlet(urlPatterns /home)public class HomeServlet 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 { //通过subjectd对象去判断是否登录 Subject subject SecurityUtils.getSubject(); boolean flag subject.isAuthenticated(); if (flag){ resp.sendRedirect(home.jsp); }else { req.getRequestDispatcher(/login).forward(req, resp); } }}访问http://localhost:8080/platform/home 进行debug此时我们通过subject.isAuthenticated()判断是否登录如果登录则重定向到home.jsp,如果没有登录则转发到/login对应的servlet【1.4.4】角色相关修改OrderListServlet的doPost方法判断是否有admin角色如果有则转发order-list.jsp,没有则转发/loginpackage com.itheima.shiro.web;import org.apache.shiro.SecurityUtils;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;/** * Description订单列表 */WebServlet(urlPatterns /order-list)public class OrderListServlet 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(); //判断当前角色 boolean flag subject.hasRole(admin); if (flag){ req.getRequestDispatcher(order-list.jsp).forward(req, resp); }else { req.getRequestDispatcher(/login).forward(req, resp); } }}访问http://localhost:8080/platform/order-list因为此时我未登录也就是说当前没有admin角色这是通过subject.hasRole(admin)返回未false【1.4.5】资源相关修改OrderAddServletpackage com.itheima.shiro.web;import org.apache.shiro.SecurityUtils;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;/** * Description添加页码 */WebServlet(urlPatterns /order-add)public class OrderAddServlet 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(); //判断是否有对应资源 boolean flag subject.isPermitted(order:add); if (flag){ req.getRequestDispatcher(order-add.jsp).forward(req, resp); }else { req.getRequestDispatcher(/login).forward(req, resp); } }}访问http://localhost:8080/platform/order-add因为此时我未登录也就是说当前没有order:add资源通过 subject.isPermitted(order:add)返回未false【2】基于Jsp标签【2.1】使用方式Shiro提供了一套JSP标签库来实现页面级的授权控制 在使用Shiro标签库前首先需要在JSP引入shiro标签【2.2】相关标签【2.3】案例【2.3.1】新建项目拷贝shiro-day01-08web-java新建shiro-day01-09web-jsp-taglib项目【2.3.2】修改home.jsp 退出 列表 添加 【2.3.3】测试访问http://localhost:8080/platform/login使用admin/123登录这个时候我们只能看见“列表”看不见“添加”点击“退出”使用jay/123登录这个时候我们只能看见“添加”看不见“列表”点击“退出”需要注意的是这里只是页面是否显示内容不能防止盗链的发生第五章 Springboot集成Shiro1、技术栈主框架springboot响应层springMVC持久层mybatis事务控制jta前端技术easyui2、数据库设计【1】数据库图解sh_user:用户表一个用户可以有多个角色sh_role:角色表一个角色可以有多个资源sh_resource:资源表sh_user_role:用户角色中间表sh_role_resource:角色资源中间表【2】数据库脚本sh_userCREATE TABLE sh_user ( ID varchar(36) NOT NULL COMMENT 主键, LOGIN_NAME varchar(36) DEFAULT NULL COMMENT 登录名称, REAL_NAME varchar(36) DEFAULT NULL COMMENT 真实姓名, NICK_NAME varchar(36) DEFAULT NULL COMMENT 昵称, PASS_WORD varchar(150) DEFAULT NULL COMMENT 密码, SALT varchar(36) DEFAULT NULL COMMENT 加密因子, SEX int(11) DEFAULT NULL COMMENT 性别, ZIPCODE varchar(36) DEFAULT NULL COMMENT 邮箱, ADDRESS varchar(36) DEFAULT NULL COMMENT 地址, TEL varchar(36) DEFAULT NULL COMMENT 固定电话, MOBIL varchar(36) DEFAULT NULL COMMENT 电话, EMAIL varchar(36) DEFAULT NULL COMMENT 邮箱, DUTIES varchar(36) DEFAULT NULL COMMENT 职务, SORT_NO int(11) DEFAULT NULL COMMENT 排序, ENABLE_FLAG varchar(18) DEFAULT NULL COMMENT 是否有效, PRIMARY KEY (ID)) ENGINEInnoDB DEFAULT CHARSETutf8 ROW_FORMATCOMPACT COMMENT用户表;sh_roleCREATE TABLE sh_role ( ID varchar(36) NOT NULL COMMENT 主键, ROLE_NAME varchar(36) DEFAULT NULL COMMENT 角色名称, LABEL varchar(36) DEFAULT NULL COMMENT 角色标识, DESCRIPTION varchar(200) DEFAULT NULL COMMENT 角色描述, SORT_NO int(36) DEFAULT NULL COMMENT 排序, ENABLE_FLAG varchar(18) DEFAULT NULL COMMENT 是否有效, PRIMARY KEY (ID)) ENGINEInnoDB DEFAULT CHARSETutf8 ROW_FORMATCOMPACT COMMENT用户角色表;sh_resourceCREATE TABLE sh_resource ( ID varchar(36) NOT NULL COMMENT 主键, PARENT_ID varchar(36) DEFAULT NULL COMMENT 父资源, RESOURCE_NAME varchar(36) DEFAULT NULL COMMENT 资源名称, REQUEST_PATH varchar(200) DEFAULT NULL COMMENT 资源路径, LABEL varchar(200) DEFAULT NULL COMMENT 资源标签, ICON varchar(20) DEFAULT NULL COMMENT 图标, IS_LEAF varchar(18) DEFAULT NULL COMMENT 是否叶子节点, RESOURCE_TYPE varchar(36) DEFAULT NULL COMMENT 资源类型, SORT_NO int(11) DEFAULT NULL COMMENT 排序, DESCRIPTION varchar(200) DEFAULT NULL COMMENT 描述, SYSTEM_CODE varchar(36) DEFAULT NULL COMMENT 系统code, IS_SYSTEM_ROOT varchar(18) DEFAULT NULL COMMENT 是否根节点, ENABLE_FLAG varchar(18) DEFAULT NULL COMMENT 是否有效, PRIMARY KEY (ID)) ENGINEInnoDB DEFAULT CHARSETutf8 ROW_FORMATCOMPACT COMMENT资源表;sh_role_resourceCREATE TABLE sh_role_resource ( ID varchar(36) NOT NULL, ENABLE_FLAG varchar(18) DEFAULT NULL, ROLE_ID varchar(36) DEFAULT NULL, RESOURCE_ID varchar(36) DEFAULT NULL, PRIMARY KEY (ID)) ENGINEInnoDB DEFAULT CHARSETutf8 ROW_FORMATCOMPACT COMMENT角色资源表;sh_user_roleCREATE TABLE sh_user_role ( ID varchar(36) NOT NULL, ENABLE_FLAG varchar(18) DEFAULT NULL, USER_ID varchar(36) DEFAULT NULL, ROLE_ID varchar(36) DEFAULT NULL, PRIMARY KEY (ID)) ENGINEInnoDB DEFAULT CHARSETutf8 ROW_FORMATCOMPACT COMMENT用户角色表;3、项目骨架4、ShiroDbRealm定义【1】图解【2】原理分析(1)、ShiroDbRealmImpl继承ShiroDbRealm向上继承AuthorizingRealmShiroDbRealmImpl实例化时会创建密码匹配器HashedCredentialsMatcher实例HashedCredentialsMatcher指定hash次数与方式交于AuthenticatingRealm(2)、调用login方法后最终调用doGetAuthenticationInfo(AuthenticationToken authcToken)方法拿到SimpleToken的对象调用UserBridgeService的查找用户方法把ShiroUser对象、密码和salt交于SimpleAuthenticationInfo去认证(3)、访问需要鉴权时调用doGetAuthorizationInfo(PrincipalCollection principals)方法然后调用UserBridgeService的授权验证【3】核心类代码【3.1】ShiroDbRealmpackage com.itheima.shiro.core;import org.apache.shiro.authc.AuthenticationInfo;import org.apache.shiro.authc.AuthenticationToken;import org.apache.shiro.authz.AuthorizationInfo;import org.apache.shiro.realm.AuthorizingRealm;import org.apache.shiro.subject.PrincipalCollection;import javax.annotation.PostConstruct;/** * * Description shiro自定义realm */public abstract class ShiroDbRealm extends AuthorizingRealm { /** * Description 认证 * param authcToken token对象 * return */ public abstract AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) ; /** * Description 鉴权 * param principals 令牌 * return */ public abstract AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals); /** * Description 密码匹配器 */ PostConstruct public abstract void initCredentialsMatcher() ;}【3.2】ShiroDbRealmImplpackage com.itheima.shiro.core.impl;import com.itheima.shiro.constant.SuperConstant;import com.itheima.shiro.core.base.ShiroUser;import com.itheima.shiro.core.base.SimpleToken;import com.itheima.shiro.core.ShiroDbRealm;import com.itheima.shiro.core.bridge.UserBridgeService;import com.itheima.shiro.pojo.User;import com.itheima.shiro.utils.BeanConv;import com.itheima.shiro.utils.DigestsUtil;import com.itheima.shiro.utils.EmptyUtil;import org.apache.shiro.authc.AuthenticationInfo;import org.apache.shiro.authc.AuthenticationToken;import org.apache.shiro.authc.SimpleAuthenticationInfo;import org.apache.shiro.authc.UnknownAccountException;import org.apache.shiro.authc.credential.HashedCredentialsMatcher;import org.apache.shiro.authz.AuthorizationInfo;import org.apache.shiro.subject.PrincipalCollection;import org.apache.shiro.util.ByteSource;import org.springframework.beans.factory.annotation.Autowired;/** * Description自定义shiro的实现 */public class ShiroDbRealmImpl extends ShiroDbRealm { Autowired private UserBridgeService userBridgeService; /** * Description 认证方法 * param authcToken 校验传入令牌 * return AuthenticationInfo */ Override public AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) { SimpleToken token (SimpleToken)authcToken; User user userBridgeService.findUserByLoginName(token.getUsername()); if(EmptyUtil.isNullOrEmpty(user)){ throw new UnknownAccountException(账号不存在); } ShiroUser shiroUser BeanConv.toBean(user, ShiroUser.class); shiroUser.setResourceIds(userBridgeService.findResourcesIdsList(user.getId())); String salt user.getSalt(); String password user.getPassWord(); return new SimpleAuthenticationInfo(shiroUser, password, ByteSource.Util.bytes(salt), getName()); } /** * Description 授权方法 * param principals SimpleAuthenticationInfo对象第一个参数 * return */ Override public AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { ShiroUser shiroUser (ShiroUser) principals.getPrimaryPrincipal(); return userBridgeService.getAuthorizationInfo(shiroUser); } /** * Description 加密方式 */ Override public void initCredentialsMatcher() { HashedCredentialsMatcher matcher new HashedCredentialsMatcher(SuperConstant.HASH_ALGORITHM); matcher.setHashIterations(SuperConstant.HASH_INTERATIONS); setCredentialsMatcher(matcher); }}【3.3】SimpleTokenpackage com.itheima.shiro.core.base;import org.apache.shiro.authc.UsernamePasswordToken;/** * Description 自定义tooken */public class SimpleToken extends UsernamePasswordToken { /** serialVersionUID */ private static final long serialVersionUID -4849823851197352099L; private String tokenType; private String quickPassword; /** * Constructor for SimpleToken * param tokenType */ public SimpleToken(String tokenType, String username,String password) { super(username,password); this.tokenType tokenType; } public SimpleToken(String tokenType, String username,String password,String quickPassword) { super(username,password); this.tokenType tokenType; this.quickPassword quickPassword; } public String getTokenType() { return tokenType; } public void setTokenType(String tokenType) { this.tokenType tokenType; } public String getQuickPassword() { return quickPassword; } public void setQuickPassword(String quickPassword) { this.quickPassword quickPassword; }}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/925584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

秦皇岛抚宁区建设局网站wordpress添加循环音乐

注解的理解和类型 java注解-最通俗易懂的讲解 廖雪峰java注解 对注解(Annotation)最直接的理解是,注解本身就相当于一个附加信息,这个附加信息并不会对原有的类,方法等进行处理,进行处理的应该是对附加信息…

2025 年运动木地板厂家:鸿源宝利,全产业链深耕打造专业运动空间解决方案

随着全民健身战略的深入推进,国内体育场馆建设迎来爆发式增长,对专业运动木地板的需求持续攀升。据行业数据显示,2024 年我国运动木地板市场规模已突破 80 亿元,预计 2025 年将保持 15% 以上的增速。在这样的背景下…

2025 钢丝绳品牌实力榜:10 大品牌特色与适用场景

在当前工业生产、工程建设等诸多领域,钢丝绳作为关键的承重与牵引部件,其质量与性能直接关系到作业安全和项目效率。然而,当下钢丝绳行业却面临着不少问题。一方面,市场上品牌数量众多,产品质量参差不齐,部分品牌…

wordpress固定链接中文沈阳网络seo公司

在Linux系统中配置和优化硬盘的RAID技术可以帮助提高数据存储性能和安全性。RAID(Redundant Array of Independent Disks)技术通过将多个硬盘组合起来,以增加性能、容量或冗余度,提高数据的可靠性和可用性。本文将介绍如何在Linux…

网站设计 网站建设口碑营销的产品有哪些

分析下面的代码&#xff0c;求运算结果。 #include <stdio.h>int main(void) {int a 6, b 4;printf("%d\n", a ^ b << 2);return 0; }分析&#xff1a; 主要是考的是“优先级”和按位“异或”&#xff0c; 左移运算符优先级高于按位异或运算符&#…

汕头拿家做网站固定ip做网站怎么备案

新年计划一&#xff1a;日更千字只差一个月就可以完成日更100字的任务了。日更百字对我来说已经不再是一种负担和任务&#xff0c;而是每天碎碎念的日记&#xff0c;解压的方式。但是我知道这些碎碎念的日记本质上是没有用的。既没有信息增量&#xff0c;也没有变现价值&#x…

家居网站建设哪家好wordpress链接在哪里

F. Paper Grading 大佬题解 一般关于前缀的问题基本都是Trie树。 首先将所给字符串建立一棵Trie树&#xff0c;Trie能够解决一个字符串在一个字符串集合中出现的次数&#xff0c;而查询前缀次数只需要找到Trie树中所给字符末尾的位置&#xff0c;那么其子树中打标记的次数即前…

网站上线前做环境部署seo网站优化培

1.sentine介绍 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案&#xff0c;当用Redis做Master-slave的高可用方案时&#xff0c;假如master宕机了&#xff0c;Redis本身(包括它的很多客户端)都没有实现自动进行主备切换&#xff0c;而Redis-sentinel本身也是一个独立运行…

返利网一类的网站怎么做做网站时网页中格式对不齐怎么办

专业课128分总分400南京理工大学818信号系统与数字电路南理工电光院考研经验分享&#xff0c;希望自己的经历对大家有借鉴。 我是在六月底确认自己保不上研然后专心备考的&#xff0c;时间确实比较紧张。虽然之前暑假看了一点高数&#xff0c;但因为抱有保研的期望&#xff0c…

昆山网站推广手机界面设计网站

树莓派配置双网卡分别为AD HOC和AP模式 需求说明&#xff1a;为了实现分级网络管理&#xff0c;将多个无人机分簇&#xff0c;簇间使用AD HOC进行无中心自组织的网络&#xff0c;簇内使用AP-AC模式进行中心化网络。因此&#xff0c;需要配置一台设备&#xff0c;同时完成AD HOC…

网站建设技术知识网站是广西住房和城乡建设厅

Shell脚本之if的用法 1、if语句的格式2、if语句的conditon介绍3、应用举例 1、if语句的格式 1&#xff09; if-elif-else语法格式 if [ condition1 ]; then # 执行条件1的代码块 elif [ condition2 ]; then # 执行条件2的代码块 else # 执行条件都不满足时的代码块 …

网站项目建设措施如何查看网站的空间

Selenium自动化入门 1、Selenium概述2、Selenium环境搭建3、Selenium基本操作4、网页元素定位5、操作Cookie6、标签页管理 1、Selenium概述 Selenium&#xff08;Web Browser Automation&#xff09;的初衷是Web应用自动化测试。Selenium广泛应用于爬虫&#xff0c;爬虫需要让浏…

国内外网站开发的现状微信开放平台怎么申请

1、受控组件在 React 中&#xff0c;可变状态(mutable state)通常保存在组件的 state 属性中&#xff0c;并且只能通过使用 setState()来更新。state&#xff1a;唯一数据源渲染表单的 React 组件还控制着用户输入过程中表单发生的操作。被 React 以这种方式控制取值的表单输入…

网站建设播放vr视频教程北京seo排名

点击上方☝SpringForAll社区 轻松关注&#xff01;及时获取有趣有料的技术文章本文来源&#xff1a;https://www.cnblogs.com/ITtangtang/p/7602363.html一、线程安全性定义&#xff1a;多个线程之间的操作无论采用何种执行时序或交替方式&#xff0c;都要保证不变性条件不被破…

石材网站源码酷炫网站源码

给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&#xff1a;true示例 2&a…

怎么用网站做word文件格式招商网站大全免费

超图iClient3DforCesium地形、影像、模型、在线影像交互示例 描述示例代码 描述 数据源&#xff1a;基于iserver发布的三维场景(地形、影像、BIM模型) 在线arcgis影像 应用&#xff1a;目录树展示源数据列表、目录树控制源数据可视化结果显隐、BIM模型点选查询关联属性 示例代…

请问做网站怎么赚钱店铺设计素材

一&#xff0c;初探&#xff0c;根据现象发现问题 chrome的performance知道很久了&#xff0c;但总是没有特别权威且跟上时代的学习资料&#xff0c;这次痛定思痛&#xff0c;直接看英文文档&#xff0c;一点点把这块啃掉&#xff0c;本笔记基于Chrome 59 step 1: 隐身模式打开…

有做游戏广告的网站网站建设论文的部首

光的相关单位及换算方法光源在单位时间、向周围空间辐射并引起视觉的能量&#xff0c;称为光通量。用Φ表示&#xff0c;单位为流明(Lm)。单位面积上接受的光通量称为照度&#xff0c;用E表示&#xff0c;单位勒克司(Lx)EΦ/SΦ&#xff0d;光通量(Lm)S&#xff0d;受照面积(㎡…

网站流量导入是什么意思最专业的网站设计

你知道什么是一次消谐器吗&#xff1f;它是一种保护装置&#xff0c;用于消除电力系统中的谐振过电压&#xff0c;保护设备的安全可靠运行。那么一次消谐器有什么作用呢&#xff1f;接下来我会为你详细介绍一下。 一次消谐器的设计原理是利用其非线性电阻特性&#xff0c;在谐振…

针对网站开发者的问答网站个人网站做淘宝客违规

简介&#xff1a;本文分享了阿里巴巴服务网格技术三位一体战略背后的思考和实践&#xff0c;关于阿里云服务网格 ASM 的一些产品功能&#xff0c;包括最近发布的一些功能。 作者&#xff1a;宗泉、宇曾 阿里巴巴三位一体战略 阿里云内部很早就提出了开源、自研、商业化三位一…