当前位置: 首页 > news >正文

泰安网站建设招聘社区团购小程序模板

泰安网站建设招聘,社区团购小程序模板,可以做ppt的网站有哪些方面,网址给我一个一、为什么要了解权限框架 权限管理框架属于系统安全的范畴#xff0c;权限管理实现对用户访问系统的控制#xff0c;按照安全规则用户可以访问而且只能访问自己被授权的资源。 目前常见的权限框架有Shiro和Spring Security#xff0c;本篇文章记录springboot整合sh…一、为什么要了解权限框架         权限管理框架属于系统安全的范畴权限管理实现对用户访问系统的控制按照安全规则用户可以访问而且只能访问自己被授权的资源。 目前常见的权限框架有Shiro和Spring Security本篇文章记录springboot整合shiro实现简单的权限控制。 二、shiro介绍         Shiro全称是Apache Shiro是一款灵活、强大的安全框架。方便简洁的处理身份认证、授权、加密等。 shiro的三个组件 Subject 【主体】指代当前用户【人、爬虫等】 SecurityManager【安全管理器】管理所有的Subject、具体安全操作的真正执行者。 Reamls本质是一个安全的DTO,用于进行权限、认证信息 通过Subject来进行认证和授权而Subject又委托给SecurityManager 需要给Shrio的SecurityManager注入Realm从而让SecurityManager能得到合法的用户及其权限进行判断。 三、环境准备 模拟场景【基于权限】 1、可以跳转到add页面说明拥有add权限。 2、可以跳转到update页面说明拥有update权限。 3、拥有add权限只展示add的链接、拥有update权限只展示update的链接 模拟场景【基于角色】 1、拥有admin身份进入add、updateselect页面 2、拥有user身份只可以进入select页面。 实现效果 环境 jdk 17 Maven 3.8.6 Mysql 8.x IDEA2021 springboot 2.7.0 3.1 数据库表以及相关数据 一共五张表用户表、角色表、权限表、用户角色表、角色权限表。初始化SQL脚本在最后的传送门。 当前数据库数据:【用户-身份-权限】 张三角色是admin 拥有权限有add 李四角色是user,拥有权限有update 3.2、shiro环境准备 1、导入必要依赖、导入springboot-shiro的整合相关依赖依赖 !-- boot-shiro整合依赖--dependencygroupIdorg.apache.shiro/groupIdartifactIdshiro-spring-boot-starter/artifactIdversion1.10.0/version/dependency!--shiro缓存--dependencygroupIdorg.apache.shiro/groupIdartifactIdshiro-ehcache/artifactIdversion1.7.1/version/dependency!-- mybatis--dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion2.1.4/version/dependency!-- mysql--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependency!-- hutool工具包--dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.7.11/version/dependency!--thymeleaf模板引擎--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-thymeleaf/artifactIdversion2.6.4/version/dependency!-- thymeleaf-shiro整合依赖 --dependencygroupIdcom.github.theborakompanioni/groupIdartifactIdthymeleaf-extras-shiro/artifactIdversion2.0.0/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdscoperuntime/scopeoptionaltrue/optional/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency2、配置文件的一一些必要参数 2、配置文件的一一些必要参数server:port: 8080 spring:thymeleaf:mode: HTMLcache: falsedatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3308/boot_mybatis?serverTimezoneUTCuseUnicodetruecharacterEncodingutf-8AllowPublicKeyRetrievalTrueusername: rootpassword: rootdebug: truemybatis:mapperLocations: mapper/*.xmlconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #日志输出map-underscore-to-camel-case: true #开启驼峰映射 3、 页面资源 准备页面资源index.html、login.html。启动项目来到首页、不用登录登录情况下可以访问任意页。 项目目录结构 四、自定义登录 第一步需要先完成一些简单的配置 1、新建UserReam类继承AuthorizingRealm 并重写他的认证和授权方法、实现自定义授权认证。 /*** 自定义UserRealm用户认证授权登录*/ public class UserRealm extends AuthorizingRealm {Autowiredprivate UserService userService;Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token ) throws AuthenticationException {System.err.println(执行了认证AuthenticationInfo);// 用户名密码数据库里取UsernamePasswordToken userToken (UsernamePasswordToken) token;IUser queryUser new IUser();queryUser.setUserName(userToken.getUsername());ListIUser userList userService.selectUser(queryUser);if(CollectionUtils.isEmpty(userList)){return null;}else {IUser user userList.get(0);System.err.println(user:user);// 密码认证 简单的equals比较return new SimpleAuthenticationInfo(user.getUserName(), user.getPassWord(),);}}Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {System.err.println(执行了授权doGetAuthenticationInfo);String username (String)principals.getPrimaryPrincipal();System.err.println(usernameusername);IUser queryUser new IUser();queryUser.setUserName(username); // 根据用户名获取身份、再由身份获取权限ListIRole roles userService.selectRolesByUser(queryUser);if(CollectionUtils.isEmpty(roles)){return null;}else {SimpleAuthorizationInfo simpleAuthorizationInfo new SimpleAuthorizationInfo();roles.forEach(role - {simpleAuthorizationInfo.addRole(role.getName());//权限信息ListIPermission perms userService.selectPermsByRole(role);if (!CollectionUtils.isEmpty(perms)) {perms.forEach(permission - {simpleAuthorizationInfo.addStringPermission(permission.getPermission());});}});return simpleAuthorizationInfo;}} } 2、新建ShiroConfiguration配置类         配置类里创建了工厂对象、安全对象、自定Ream等bean对象、  shiro内置了五个过滤器可对资源、请求接口等进行拦截 /*** shiro配置类*/ Configuration public class ShiroConfiguration {/*** 工厂对象3*/Beanpublic ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager defaultWebSecurityManager){ShiroFilterFactoryBean bean new ShiroFilterFactoryBean();//给filter设置安全管理bean.setSecurityManager(defaultWebSecurityManager);/**** 基于路径拦截资源* anon 无需认证* authc 必须认证* user 记住我功能* perms 拥有对某个资源* roles 用某个角色权限*/MapString,String map new HashMap();map.put(/index,authc);map.put(/toLogin,anon);map.put(/,authc);map.put(/toAdd,perms[add]);map.put(/toUpdate,perms[update]);map.put(/toSelect, roles[admin]);//更改默认的登录请求路径bean.setLoginUrl(/toLogin);//未授权请求路径bean.setUnauthorizedUrl(/unauthorized);bean.setFilterChainDefinitionMap(map);return bean;}/*** 安全对象2*/Bean(name securityManager)public DefaultWebSecurityManager getDefaultWebSecurityManager(Qualifier(userRealm) UserRealm userRealm){DefaultWebSecurityManager securityManager new DefaultWebSecurityManager();// 管理realmsecurityManager.setRealm(userRealm);return securityManager;}/*** 创建realm对象先创建再接管1*/Bean(name userRealm)public UserRealm userRealm(){return new UserRealm();}/*** 页面的Shiro标签生效* return*/Beanpublic ShiroDialect shiroDialect(){return new ShiroDialect();}} shiro登录过程 传统登录功能 shiro拿到用户信息后。不是直接调用业务逻辑层的方法。现由SecurityUtils拿到登录对象、由对象取执行login方法由于UserRealm 继承了AuthorizingRealm、所以登录操作被拦截、完成认证操作。login方法会抛出需要认证失败的异常。根据异常信息可以给前端对应的提示。 第二步 自定义登录方法 /*** 自定义UserRealm用户认证授权登录*/ public class UserRealm extends AuthorizingRealm {Autowiredprivate UserService userService;Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token ) throws AuthenticationException {System.err.println(执行了认证AuthenticationInfo);SimpleAuthenticationInfo info null;String username token.getPrincipal().toString();IUser queryUser new IUser();queryUser.setUserName(username);ListIUser dbUserList userService.selectUser(queryUser);if(CollectionUtils.isNotEmpty(dbUserList)){IUser dbUser dbUserList.get(0);// 将注册时保存的随机盐构造ByteSource对象info new SimpleAuthenticationInfo(dbUser.getUserName(),dbUser.getPassWord(),this.getName()); // info new SimpleAuthenticationInfo(dbUser.getUserName(),dbUser.getPassWord(),new SimpleByteSource(dbUser.getSalt()),this.getName());}return info;}Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {System.err.println(执行了授权doGetAuthenticationInfo);String username (String)principals.getPrimaryPrincipal();System.err.println(usernameusername);IUser queryUser new IUser();queryUser.setUserName(username); // 根据用户名获取身份、再由身份获取权限ListIRole roles userService.selectRolesByUser(queryUser);if(CollectionUtils.isEmpty(roles)){return null;}else {SimpleAuthorizationInfo simpleAuthorizationInfo new SimpleAuthorizationInfo();roles.forEach(role - {simpleAuthorizationInfo.addRole(role.getName());//权限信息ListIPermission perms userService.selectPermsByRole(role);if (!CollectionUtils.isEmpty(perms)) {perms.forEach(permission - {simpleAuthorizationInfo.addStringPermission(permission.getPermission());});}});return simpleAuthorizationInfo;}} } 完成了简单资源授权为了前端展示把对应的数据存到model IUser user new IUser();             user.setUserName(username);             ListIRole roles userService.selectRolesByUser(user);             ListIPermission perms userService.selectPermsByRole(roles.get(0));             model.addAttribute(role,roles.get(0).getName());             model.addAttribute(perms,perms);  效果如下
http://www.tj-hxxt.cn/news/226667.html

相关文章:

  • asp业务网站网站的权限管理怎么做
  • 网站制作资讯自助建站和wordpress
  • 想建一个自己的网站wordpress登陆改图标和连接
  • 世界优秀摄影作品网站wordpress上传安装包
  • 辽宁省建设工程信息网32位浏览器贵阳网站优化排名
  • 设计师网上接单的网站网络科技公司名字大全参考
  • 辽宁鞍山最新通知网站优化排名哪家好
  • 网站icp备案查不到建一个公司网站费用
  • 江苏建设部官方网站上海城市建设档案馆网站
  • wordpress标签列表内页无效链接网站seo技巧
  • 网站如何做提交的报名表理财网站方案建设
  • 电话营销网站推广wordpress新建header
  • 食品贸易网站建设案例wordpress音乐门户主题
  • 基础微网站开发可信赖浙江省住房建设厅网站首页
  • 网站制作怎样做寿光网站制作
  • 赣州住房建设部网站网络热词大全
  • 深圳网站设计工作室百度快照推广是什么意思
  • 桥的设计网站建设wordpress个人版支付
  • 网站建设招标提问编写网站策划方案
  • 织梦网站教程id怎么自动导入wordpress
  • 网站优化要做哪些课程设计做淘宝网站的目的
  • 网站开发和浏览器兼容问题域名是什么意思
  • 东莞手机网站设计公司在线网页代理太太猫
  • 建筑公司网站石家庄网站建设 朝阳区
  • 合肥网站建设 卫来网络中小企业局域网组网方案
  • 商务网站建设论文总结jsp做网站实例教程
  • 沈阳快速建站公司有哪些广告公司取名大全最新版的
  • 怎样做网站xml潍坊企业网络推广
  • 做论坛网站如何赚钱环保公司网站模版
  • 网站建设微信商城网站制作怎样做销售网站