思路:先创建一个专门的类ActiveUser用于存储用户登录的信息,主要用于存储用户id,账户,名称,菜单,权限。

认证拦截器主要是查看用户是否已登陆,如果没有转发到登陆界面,用户用账户跟密码登录时候先验证账户密码认证。

如果正确登陆之后进入授权拦截器中,授权拦截器主要查看session域中用户的菜单与权限(如果其权限满足能访问资源就放行)。用户每点一次按钮都会访问一个URL,都会进行权限的判断。

在session中存取用户信息的思路:根据用户的id去关联查询用户的菜单与权限以对象形式放入list中,并将查出来的信息存到ActiveUser,将ActiveUser存到session域中。菜单主要是进去之后左边的大菜单,菜单的URL是点击大菜单的时候跳转的页面,权限是其点击小按钮进行每一次访问的URL(也会进行处理),这样处理比较严谨。

aaarticlea/png;base64,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" alt="" />

1.流程

aaarticlea/png;base64,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" alt="" />

2.系统登陆

系统 登陆相当 于用户身份认证,用户成功,要在session中记录用户的身份信息.

操作流程:

用户进行登陆页面

输入用户名和密码进行登陆

进行用户名和密码校验

如果校验通过,在session记录用户身份信息

2.1    用户的身份信息

创建专门类用于记录用户身份信息。

  1. package cn.qlq.springmvc.pojo;
  2.  
  3. import java.util.Iterator;
  4. import java.util.List;
  5.  
  6. import com.sun.org.apache.bcel.internal.generic.NEW;
  7.  
  8. /**
  9. * 用户身份信息,存入session 由于tomcat将session会序列化在本地硬盘上,所以使用Serializable接口
  10. *
  11. * @author Thinkpad
  12. *
  13. */
  14. public class ActiveUser implements java.io.Serializable {
  15. private String userid;//用户id(主键)
  16. private String usercode;// 用户账号
  17. private String username;// 用户名称
  18.  
  19. private List<SysPermission> menus;// 菜单
  20. private List<SysPermission> permissions;// 权限
  21.  
  22. public String getUsername() {
  23. return username;
  24. }
  25.  
  26. public void setUsername(String username) {
  27. this.username = username;
  28. }
  29.  
  30. public String getUsercode() {
  31. return usercode;
  32. }
  33.  
  34. public void setUsercode(String usercode) {
  35. this.usercode = usercode;
  36. }
  37.  
  38. public String getUserid() {
  39. return userid;
  40. }
  41.  
  42. public void setUserid(String userid) {
  43. this.userid = userid;
  44. }
  45.  
  46. public List<SysPermission> getMenus() {
  47. return menus;
  48. }
  49.  
  50. public void setMenus(List<SysPermission> menus) {
  51. this.menus = menus;
  52. }
  53.  
  54. public List<SysPermission> getPermissions() {
  55. return permissions;
  56. }
  57.  
  58. public void setPermissions(List<SysPermission> permissions) {
  59. this.permissions = permissions;
  60. }
  61.  
  62. }

2.2             mapper

mapper接口: 根据用户账号查询用户(sys_user)信息(使用逆向工程生成的mapper)

查询菜单与权限的时候需要进行多表查询,自定义mapper

mapper.java

  1. public interface SysPermissionMapperCustom {
  2.  
  3. //根据用户id查询菜单
  4. public List<SysPermission> findMenuListByUserId(String userid)throws Exception;
  5. //根据用户id查询权限url
  6. public List<SysPermission> findPermissionListByUserId(String userid)throws Exception;
  7.  
  8. }

mapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  3. <mapper namespace="cn.qlq.springmvc.mapper.SysPermissionMapperCustom" >
  4.  
  5. <!-- 根据用户id查询url -->
  6. <select id="findPermissionListByUserId" parameterType="string" resultType="cn.qlq.springmvc.pojo.SysPermission">
  7. SELECT
  8. *
  9. FROM
  10. sys_permission
  11. WHERE TYPE = 'permission'
  12. AND id IN
  13. (SELECT
  14. sys_permission_id
  15. FROM
  16. sys_role_permission
  17. WHERE sys_role_id IN
  18. (SELECT
  19. sys_role_id
  20. FROM
  21. sys_user_role
  22. WHERE sys_user_id = #{id}))
  23. </select>
  24.  
  25. <!-- 根据用户id查询菜单 -->
  26. <select id="findMenuListByUserId" parameterType="string" resultType="cn.qlq.springmvc.pojo.SysPermission">
  27. SELECT
  28. *
  29. FROM
  30. sys_permission
  31. WHERE TYPE = 'menu'
  32. AND id IN
  33. (SELECT
  34. sys_permission_id
  35. FROM
  36. sys_role_permission
  37. WHERE sys_role_id IN
  38. (SELECT
  39. sys_role_id
  40. FROM
  41. sys_user_role
  42. WHERE sys_user_id = #{id}))
  43. </select>
  44.  
  45. </mapper>

2.3 Service(进行用户名和密码校验)

接口功能:根据用户的身份和密码 进行认证,如果认证通过,返回用户身份信息

认证过程:

根据用户身份(账号)查询数据库,如果查询不到用户不存在

对输入的密码 和数据库密码 进行比对,如果一致,认证通过

  1. package cn.qlq.springmvc.serviceImpl;
  2.  
  3. import java.util.List;
  4.  
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7.  
  8. import cn.qlq.springmvc.Exception.MyException;
  9. import cn.qlq.springmvc.mapper.SysPermissionMapperCustom;
  10. import cn.qlq.springmvc.mapper.SysUserMapper;
  11. import cn.qlq.springmvc.pojo.ActiveUser;
  12. import cn.qlq.springmvc.pojo.SysPermission;
  13. import cn.qlq.springmvc.pojo.SysUser;
  14. import cn.qlq.springmvc.pojo.SysUserExample;
  15. import cn.qlq.springmvc.service.SysService;
  16. import cn.qlq.springmvc.utils.MD5;
  17.  
  18. /**
  19. * 认证和授权
  20. *
  21. * @author: qlq
  22. * @date : 2017年7月28日上午10:45:52
  23. */
  24. @Service
  25. public class SysServiceImpl implements SysService {
  26.  
  27. @Autowired
  28. private SysUserMapper sysUserMapper;
  29. @Autowired
  30. private SysPermissionMapperCustom sysPermissionMapperCustom;
  31.  
  32. @Override
  33. public ActiveUser authenticat(String userCode, String password) throws Exception {
  34. /**
  35. * 认证过程: 根据用户身份(账号)查询数据库,如果查询不到用户不存在 对输入的密码 和数据库密码 进行比对,如果一致,认证通过
  36. */
  37. // 根据用户账号查询数据库
  38. SysUser sysUser = this.findSysUserByUserCode(userCode);
  39.  
  40. if (sysUser == null) {
  41. // 抛出异常
  42. throw new MyException("用户账号不存在");
  43. }
  44.  
  45. // 数据库密码 (md5密码 )
  46. String password_db = sysUser.getPassword();
  47.  
  48. // 对输入的密码 和数据库密码 进行比对,如果一致,认证通过
  49. // 对页面输入的密码 进行md5加密
  50. String password_input_md5 = new MD5().getMD5ofStr(password);
  51. if (!password_input_md5.equalsIgnoreCase(password_db)) {
  52. // 抛出异常
  53. throw new MyException("用户名或密码 错误");
  54. }
  55. // 得到用户id
  56. String userid = sysUser.getId();
  57. // 根据用户id查询菜单
  58. List<SysPermission> menus = this.findMenuListByUserId(userid);
  59.  
  60. // 根据用户id查询权限url
  61. List<SysPermission> permissions = this.findPermissionListByUserId(userid);
  62.  
  63. // 认证通过,返回用户身份信息
  64. ActiveUser activeUser = new ActiveUser();
  65. activeUser.setUserid(sysUser.getId());
  66. activeUser.setUsercode(userCode);
  67. activeUser.setUsername(sysUser.getUsername());// 用户名称
  68.  
  69. // 放入权限范围的菜单和url
  70. activeUser.setMenus(menus);
  71. activeUser.setPermissions(permissions);
  72.  
  73. return activeUser;
  74. }
  75.  
  76. // 根据用户账号查询用户信息
  77. public SysUser findSysUserByUserCode(String userCode) throws Exception {
  78. // 根据用户名查询用户信息
  79. SysUserExample sysUserExample = new SysUserExample();
  80. SysUserExample.Criteria criteria = sysUserExample.createCriteria();
  81. criteria.andUsercodeEqualTo(userCode);
  82.  
  83. List<SysUser> list = sysUserMapper.selectByExample(sysUserExample);
  84.  
  85. if (list != null && list.size() == 1) {
  86. return list.get(0);
  87. }
  88.  
  89. return null;
  90. }
  91.  
  92. @Override
  93. public List<SysPermission> findMenuListByUserId(String userid) throws Exception {
  94.  
  95. return sysPermissionMapperCustom.findMenuListByUserId(userid);
  96. }
  97.  
  98. @Override
  99. public List<SysPermission> findPermissionListByUserId(String userid) throws Exception {
  100.  
  101. return sysPermissionMapperCustom.findPermissionListByUserId(userid);
  102. }
  103. }

2.4      controller(记录session)

  1. package cn.qlq.springmvc.controller;
  2.  
  3. import javax.servlet.http.HttpSession;
  4.  
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8.  
  9. import cn.qlq.springmvc.Exception.MyException;
  10. import cn.qlq.springmvc.pojo.ActiveUser;
  11. import cn.qlq.springmvc.service.SysService;
  12.  
  13. @Controller
  14. public class LoginController {
  15.  
  16. @Autowired
  17. private SysService sysService;
  18.  
  19. //用户登陆提交方法
  20. /**
  21. *
  22. * <p>Title: login</p>
  23. * <p>Description: </p>
  24. * @param session
  25. * @param randomcode 输入的验证码
  26. * @param usercode 用户账号
  27. * @param password 用户密码
  28. * @return
  29. * @throws Exception
  30. */
  31. @RequestMapping("/login")
  32. public String login(HttpSession session, String randomcode,String usercode,String password)throws Exception{
  33.  
  34. //校验验证码,防止恶性攻击
  35. //从session获取正确验证码
  36. String validateCode = (String) session.getAttribute("validateCode");
  37.  
  38. //输入的验证和session中的验证进行对比
  39. if(!randomcode.equals(validateCode)){
  40. //抛出异常
  41. throw new MyException("验证码输入错误");
  42. }
  43.  
  44. //调用service校验用户账号和密码的正确性
  45. ActiveUser activeUser = sysService.authenticat(usercode, password);
  46.  
  47. //如果service校验通过,将用户身份记录到session
  48. session.setAttribute("activeUser", activeUser);
  49. //重定向到商品查询页面
  50. return "redirect:/first.action";
  51. }
  52.  
  53. //用户退出
  54. @RequestMapping("/logout")
  55. public String logout(HttpSession session)throws Exception{
  56.  
  57. //session失效
  58. session.invalidate();
  59. //重定向到商品查询页面
  60. return "redirect:/first.action";
  61.  
  62. }
  63.  
  64. }

2.5     用户认证拦截器

  1. package cn.qlq.springmvc.inteceptor;
  2.  
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5.  
  6. import org.springframework.web.servlet.HandlerInterceptor;
  7. import org.springframework.web.servlet.ModelAndView;
  8. /**
  9. * SpringMVC的拦截器
  10. * @author: qlq
  11. * @date : 2017年7月22日下午12:20:52
  12. */
  13. public class Inteceptor1 implements HandlerInterceptor{
  14.  
  15. @Override
  16. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
  17. // 判断是否是登陆
  18. String requestURI = request.getRequestURI(); //springmvc-mybatis/itemlist.action
  19. StringBuffer requestURL = request.getRequestURL(); //http://localhost:8080/springmvc-mybatis/itemlist.action
  20. // 判断用户是否登陆 如果没有登陆 重定向到登陆页面 不放行 如果登陆了 就放行了
  21. if(!requestURI.contains("login")){
  22. Object attribute = request.getSession().getAttribute("user");
  23. if(attribute==null){
  24. response.sendRedirect(request.getContextPath()+"/login.action");
  25. return false;
  26. }
  27. }
  28. //不放行的话返回false
  29. return true;
  30. }
  31. @Override
  32. public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
  33. throws Exception {
  34. System.out.println("这是方法后1");
  35. }
  36. @Override
  37. public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
  38. throws Exception {
  39. // TODO Auto-generated method stub
  40. System.out.println("这是页面渲染后1");
  41. }
  42.  
  43. }

2.6用户授权拦截器(在认证拦截器之后配置)

  1. package cn.qlq.springmvc.inteceptor;
  2.  
  3. import java.util.List;
  4.  
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import javax.servlet.http.HttpSession;
  8.  
  9. import org.springframework.web.servlet.HandlerInterceptor;
  10. import org.springframework.web.servlet.ModelAndView;
  11.  
  12. import cn.qlq.springmvc.pojo.ActiveUser;
  13. import cn.qlq.springmvc.pojo.SysPermission;
  14. import cn.qlq.springmvc.utils.ResourcesUtil;
  15.  
  16. public class PermissionInterceptor implements HandlerInterceptor {
  17.  
  18. //在执行handler之前来执行的
  19. //用于用户认证校验、用户权限校验
  20. @Override
  21. public boolean preHandle(HttpServletRequest request,
  22. HttpServletResponse response, Object handler) throws Exception {
  23.  
  24. //得到请求的url
  25. String url = request.getRequestURI();
  26.  
  27. //判断是否是公开 地址
  28. //实际开发中需要公开 地址配置在配置文件中
  29. //从配置中取逆名访问url
  30.  
  31. List<String> open_urls = ResourcesUtil.gekeyList("anonymousURL");
  32. //遍历公开 地址,如果是公开 地址则放行
  33. for(String open_url:open_urls){
  34. if(url.indexOf(open_url)>=0){
  35. //如果是公开 地址则放行
  36. return true;
  37. }
  38. }
  39.  
  40. //从配置文件中获取公共访问地址
  41. List<String> common_urls = ResourcesUtil.gekeyList("commonURL");
  42. //遍历公用 地址,如果是公用 地址则放行
  43. for(String common_url:common_urls){
  44. if(url.indexOf(common_url)>=0){
  45. //如果是公开 地址则放行
  46. return true;
  47. }
  48. }
  49.  
  50. //获取session
  51. HttpSession session = request.getSession();
  52. ActiveUser activeUser = (ActiveUser) session.getAttribute("activeUser");
  53. //从session中取权限范围的url
  54. List<SysPermission> permissions = activeUser.getPermissions();
  55. for(SysPermission sysPermission:permissions){
  56. //权限的url
  57. String permission_url = sysPermission.getUrl();
  58. if(url.indexOf(permission_url)>=0){
  59. //如果是权限的url 地址则放行
  60. return true;
  61. }
  62. }
  63.  
  64. //执行到这里拦截,跳转到无权访问的提示页面
  65. request.getRequestDispatcher("/WEB-INF/jsp/refuse.jsp").forward(request, response);
  66.  
  67. //如果返回false表示拦截不继续执行handler,如果返回true表示放行
  68. return false;
  69. }
  70. //在执行handler返回modelAndView之前来执行
  71. //如果需要向页面提供一些公用 的数据或配置一些视图信息,使用此方法实现 从modelAndView入手
  72. @Override
  73. public void postHandle(HttpServletRequest request,
  74. HttpServletResponse response, Object handler,
  75. ModelAndView modelAndView) throws Exception {
  76. System.out.println("HandlerInterceptor1...postHandle");
  77.  
  78. }
  79. //执行handler之后执行此方法
  80. //作系统 统一异常处理,进行方法执行性能监控,在preHandle中设置一个时间点,在afterCompletion设置一个时间,两个时间点的差就是执行时长
  81. //实现 系统 统一日志记录
  82. @Override
  83. public void afterCompletion(HttpServletRequest request,
  84. HttpServletResponse response, Object handler, Exception ex)
  85. throws Exception {
  86. System.out.println("HandlerInterceptor1...afterCompletion");
  87. }
  88.  
  89. }

源码地址:

https://github.com/qiao-zhi/quanxian.git

基于URL的权限管理(三)的更多相关文章

  1. 基于url的权限管理

    基于url权限管理流程 完成权限管理的数据模型创建. 1.     系统登陆 系统 登陆相当 于用户身份认证,用户成功,要在session中记录用户的身份信息. 操作流程: 用户进行登陆页面 输入用户 ...

  2. shiro-5基于url的权限管理

    1.1 搭建环境 1.1.1 数据库 mysql5.1数据库中创建表:用户表.角色表.权限表(实质上是权限和资源的结合 ).用户角色表.角色权限表. 完成权限管理的数据模型创建. 1.1.2 开发环境 ...

  3. 【shiro】(5)---基于Shiro的权限管理

    基于Shiro的权限管理项目搭建 前面写了四篇有关权限的文章,算是这篇文章的铺垫了.这篇文章采用 开发环境           JDK1.8          Eclipse          Mav ...

  4. 【shiro】(2)---基于RUL的权限管理

    基于RUL的权限管理 我想在写shiro权限管理认证前,先来一个基于URL实现的权限管理控制. 一.基于URI的权限业务逻辑  实现思路:       将系统操作的每个url配置在权限表中,将权限对应 ...

  5. 基于DDDLite的权限管理OpenAuth.net 1.0版正式发布

    距离上一篇OpenAuth.net的文章已经有5个多月了,在这段时间里项目得到了很多朋友的认可,开源中国上面的Star数接近300,于是坚定了我做下去的信心.最近稍微清闲点,正式推出1.0版,并在阿里 ...

  6. 在ASP.NET MVC中实现基于URL的权限控制

    本示例演示了在ASP.NET MVC中进行基于URL的权限控制,由于是基于URL进行控制的,所以只能精确到页.这种权限控制的优点是可以在已有的项目上改动极少的代码来增加权限控制功能,和项目本身的耦合度 ...

  7. 10.spring-boot基于角色的权限管理页面实现

    10.spring-boot基于角色的权限管理页面实现

  8. 基于云端的通用权限管理系统,SAAS服务,基于SAAS的权限管理,基于SAAS的单点登录SSO,企业单点登录,企业系统监控,企业授权认证中心

    基于云端的通用权限管理系统 SAAS服务 基于SAAS的权限管理 基于SAAS的单点登录SSO 基于.Net的SSO,单点登录系统,提供SAAS服务 基于Extjs 4.2 的企业信息管理系统 基于E ...

  9. devops-jenkins基于角色的权限管理RBAC

    一. devops-jenkins基于角色的权限管理RBAC 1 安装角色的rbac角色管理  1.1) 点击系统管理 1.2) 选择插件管理 1.3) 选择可选插件,输入role搜索 1.4) 选择 ...

随机推荐

  1. Web api dynamic

    参考: ajax调用实例     <script>         var user = { name_CN: "haha", pwd: "123" ...

  2. Python网络爬虫:空姐网、糗百、xxx结果图与源码

    如前面所述,我们上手写了空姐网爬虫,糗百爬虫,先放一下传送门: Python网络爬虫requests.bs4爬取空姐网图片Python爬虫框架Scrapy之爬取糗事百科大量段子数据Python爬虫框架 ...

  3. android 开启闪光灯小应用

    该程序需要在AndroidManifest.xml添加权限,属性 android:screenOrientation="portrait" android.permission.C ...

  4. java基础基础总结----- 常用DOS命令(一)

    常用DOS命令 dir(directory):列出当前目录下的文件以及文件夹 mkdir (make directory) : 创建目录 rd (remove directory): 删除目录 cd ...

  5. 简易ATM机

    简易ATM机(代码如下): /* * 功能:简易银行系统 */package day8; import java.util.Scanner; /** * * @FengYan Huang Admini ...

  6. myeclipse 怎么安装与激活

    摘录自:http://blog.csdn.net/u012318074/article/details/71310553 第一步:安装完成后不要运行MyEclipse 第二步:下载对应的破解文件 第三 ...

  7. 多目标遗传算法 ------ NSGA-II (部分源码解析)辅助变量 双链表操作 list.c

    /* A custom doubly linked list implemenation */ # include <stdio.h> # include <stdlib.h> ...

  8. 1、JDBC-Connection

    新建Maven工程 pom.xml <dependencies> <dependency> <groupId>mysql</groupId> <a ...

  9. Linux最全vi命令

    1. 关于Vim vim是我最喜欢的编辑器,也是linux下第二强大的编辑器. 虽然emacs是公认的世界第一,我认为使用emacs并没有使用vi进行编辑来得高效. 如果是初学vi,运行一下vimtu ...

  10. Exception异常转String【转】

    把异常的栈轨迹以String形式返回 /** * 把异常的栈轨迹以String形式返回,而不是直接打印到console * @author King * @time 2015-04-29 * @ret ...