上线的项目,不可避免的会遇见用户提出的bug,这时候我们可能需要去用户的页面重现用户所说的Bug,为了安全,最好进入用户页面的时候不能修改用户的数据,只能查看。

对于上述需求实现的方法有多种:

1:根据ajax请求方式来进行拦截,如果ajax请求方式不是get请求,则在filter或者aop中拦截掉,这种方法实现起来最简单,能较好的在分布式系统发挥工作,但是要求接口必须是restful风格。

2:在操作dao之前进行拦截,在进行数据库操作之前如果检测到当前的用户只允许查看,则抛异常进行拦截,下面讲述此种方式:

大致过程:

(1)编写mybatis拦截器拦截所有的增删改sql。

(2):若是访客身份登录用户账户则分配一个cookie用来表明当前用户是访客身份,以便于mybatis拦截器判断,也可以将此标志放在session中,在mybatis拦截器中通过sessionId从session中判断用户是否访客身份。

(3):在异常处理器中捕获拦截器拦截后抛出的异常,并返回提示给客户端。

具体实现:

(1)首先编写mybatis拦截器以便于拦截所有的修改sql,代码如下:

package cn.lll.iic.ssp.mgr.common;import cn.lll.framework.exception.IllegalUpdateException;
import cn.lll.framework.util.ToolUtil;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.*;import java.util.Properties;/*** @time:2020/9/28* @function:拦截sql更新操作*/
@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})
})
public class MybatisEventInterceptor implements Interceptor {@Overridepublic Object intercept(Invocation invocation) throws Throwable {//判断登录来源String origin = ToolUtil.getCookieValue("origin");System.out.println(origin);if ("admin".equals(origin)){throw new IllegalUpdateException("当前登录身份不允许更新");}return invocation.proceed();}@Overridepublic Object plugin(Object target) {return Plugin.wrap(target, this);}@Overridepublic void setProperties(Properties properties) {}
}

获取cookie方法对应代码:

/*** @description:从当前线程上线文获取请求参数,必须在spring web项目下使用* @param paramName  参数名* @return java.lang.String*/public static String getCurrentUsername(String paramName){ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = servletRequestAttributes.getRequest();return request.getParameter(paramName);}//从当前请求中获取指定cookie的值,必须在spring web项目下使用public static String getCookieValue(String key){ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = servletRequestAttributes.getRequest();Cookie[] cookies = request.getCookies();if (cookies == null) return "";for (Cookie cookie : cookies) {if ( Objects.equals(key, cookie.getName()) ){return cookie.getValue();}}return "";}

应用启动加载拦截器:

@Configuration
public class SspCfg {@Autowiredprivate List<SqlSessionFactory> sqlSessionFactoryList;//注入的bean执行的初始化方法,执行一次@PostConstructpublic void addMySqlInterceptor() {MybatisEventInterceptor interceptor = new MybatisEventInterceptor();//拦截sql更新操作for (SqlSessionFactory sqlSessionFactory : sqlSessionFactoryList) {sqlSessionFactory.getConfiguration().addInterceptor(interceptor);}}
}

(2):编写访客登录接口,并设置cookie,登录成功后跳转到主页。

@GetMapping(path = "/login-admin")public JsonResult adminLogin(@RequestParam(name = "username") String username, @RequestParam(name = "pwd") String adminPwd){try {SysUser user = iMgrLoginService.adminLogin(username, adminPwd);this.saveSession(this.SYS_AUTH_SESSION_USERNAME, user);//cookie注明是admin登录用户账户Cookie flagCookie = new Cookie("origin", "admin");flagCookie.setPath("/");this.response.addCookie(flagCookie);this.response.sendRedirect("/index.html");return null;} catch (BusException | IOException e) {return JsonResult.createFail(e);}}

除此之外,在用户登录之前我们还需将新加的origin cookie删除,以免影响用户登录:

(3):处理拦截器抛出的自定义异常。

异常代码:

/*** @time:2020/9/29* @function:不允许的sql更新异常*/
public class IllegalUpdateException extends RuntimeException{public IllegalUpdateException(String message) {super(message);}
}

结束。

管理员访客身份登录用户账户,java web/springboot/mybatis实现只能看用户信息但不允许修改相关推荐

  1. chromebook刷机_如何以访客身份在Chrome和Chromebook上浏览

    chromebook刷机 Guest mode for Google Chrome and on Chromebooks is perfect if you need to lend your com ...

  2. java 访客模式,每日一课 | Java 8中的instanceof运算符和访客模式替换

    每日一课 | Java 8中的instanceof运算符和访客模式替换 每日一课 | Java 8中的instanceof运算符和访客模式替换 我有一个梦想,不再需要操作员和垂头丧气的instance ...

  3. 自助访客登记与访客身份核验立式一体机

    访客系统基本功能: 1.智能预约:可通过现场登记.网页提交信息.微信公众号预约等多种方式进行访客登记,可与企业OA系统对接,系统化管理,操作便捷. 2.证件+人脸身份验证:访客身份证.RFID访客卡. ...

  4. 基于javaweb+jsp的访客管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Layui Ajax)

    基于javaweb+jsp的访客管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Layui Ajax) JavaWeb JavaBean JSP MVC M ...

  5. springboot+mybatis+SpringSecurity 实现用户角色数据库管理(一)

    本文使用springboot+mybatis+SpringSecurity 实现用户权限数据库管理 实现用户和角色用数据库存储,而资源(url)和权限的对应采用硬编码配置. 也就是角色可以访问的权限通 ...

  6. java/web/springboot项目使用WebSocket消息推送

    java/web/springboot项目使用WebSocket消息推送 最近项目中,有消息推送的广播和在线咨询的功能,以前也没搞过啊,有些小伙伴估计也是,那肯定要赶紧学习起来啊~ 不说废话,今天就告 ...

  7. 基于javaweb的商品进销存系统(java+vue+springboot+mybatis+mysql)

    基于javaweb的商品进销存系统(java+vue+springboot+mybatis+mysql) 运行环境 Java≥8.MySQL≥5.7.Node.js≥10 开发工具 后端:eclips ...

  8. JAVA前端修改密码,Java Web版SVN 配置管理工具 2.0 (远道建立仓库,修改密码,设置权限,支持apache等)...

    Java Web版SVN 配置管理工具 2.0 (远程建立仓库,修改密码,设置权限,支持apache等) 3.0开始,已经迁移到google code,这里停止下载.http://code.googl ...

  9. Java项目:个人博客系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括:文章展示.热门文章.文章分类.标签云用户登录评论.匿名评论用户留言.匿名留言评论管理.文章发布.文章管理文章数 ...

最新文章

  1. 【POJ】1308 Is It A Tree?((并查集 + set)or (map))
  2. DM***时使用OSPF时邻居不断UPDOWN
  3. 宁波大学计算机王老师,王翀_宁波大学研究生导师信息
  4. AbstractByteBuf源码分析
  5. PAT_B_1086_Java(15分)
  6. matlab 多项式表达,Matlab多项式运算
  7. linux fork脚本,shell调度脚本的三种不同方法(fork, exec, source)
  8. javamail发送邮件,解决被垃圾邮件问题
  9. 徐州哪个技校学计算机,徐州技校,徐州技术学校哪个好,徐州技术学校哪个知名度高一点 - IT教育频道...
  10. 软件评测师备考经验分享
  11. {最强实用}手机衩偷了,可以用这招轻易取回来(值得学习)
  12. 零基础学习云计算需要准备什么?
  13. Fedora20在神州战神K650D1安装过程,使用netinstall和Dvd.iso镜像安装。
  14. 无法打开模块文件“C:\Users\fkg\AppData\Local\Temp\.NETFramework,Version=v4.5.AssemblyAttributes.vb”系统找不到指定文件
  15. 欧拉定理,费马小定理证明
  16. 计算机 博士 论文要求,计算机学院博士生发表论文要求.doc
  17. Windows Server 2012 R2安装域控制器完整版
  18. matlab - 3 自由度的机械臂
  19. 什么是照片大小?像素和照片 长、宽什么关系?分辨率是什么?
  20. ZigBee开发笔记博文导航

热门文章

  1. jsp学习之包含——include
  2. 安卓布局工具---Hierarchy Viewer
  3. 判断checkbox是否被选中,判定选中的个数!
  4. SharePoint 2010: 设计BCS工作流
  5. python networkx库_python之networkx库小结
  6. table row设置cell的html,css中display设置为table、table-row、table-cell后的作用及其注意点...
  7. php7.2与php5.6共存,同域名下php5.6与7.2同时运行
  8. python怎么输出文字_python怎么输出汉字
  9. MyBatis快速入门及深入
  10. 淮阳一高2021高考成绩查询,周口教育网2021年淮阳中招成绩查询系统