范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

SpringBoot整合Shiro实现用户认证

  添加依赖                          org.apache.shiro             shiro-spring             1.4.0         
  前端测试代码
  controller(控制层) @RequestMapping("toLogin")     public  String toLogin(String userName,String password,Model model){         // 使用shiro 编写登录逻辑         // 1。获取subject         Subject subject = SecurityUtils.getSubject();         //2。将参数封装成token         UsernamePasswordToken token = new UsernamePasswordToken(userName,password);         //3。执行登录         try{             subject.login(token);             return "logins";         }catch (UnknownAccountException e){             model.addAttribute("message","用户不存在");                     return "login";         }catch (IncorrectCredentialsException e){             model.addAttribute("message","密码错误");             return "login";         }     }
  ShiroConfig(配置类) @Configuration public class ShiroConfig {         /*         * 创建  ShiroFilterFactoryBean 对象         * */      @Bean     public ShiroFilterFactoryBean getShiroFilterFactoryBean(){             // 创建过滤器         ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();              // 设置安全管理器         shiroFilterFactoryBean.setSecurityManager(getDefaultWebSecurityManager());             //添加shiro 内置过滤器              /*             * shiro 内置过滤器 ,可以实现权限相关的拦截器             *             *   常用的过滤器()             *   anon:无需认证可以访问             *   authc:必须认证才可以访问             *   user: 如果使用rememberme的功能可以访问             *    perms:该资源必须得到资源权限才可以访问             *   role:该资源必须得到角色权限才可以访问             * */         Map filterMap = new LinkedHashMap<>();         // 放过的路径         filterMap.put("/shiroController/index","anon");         filterMap.put("/loginController/toLogin","anon");//key:访问路径 value:过滤级别         //拦截所有         filterMap.put("/**","authc");         //强行跳转的页面         shiroFilterFactoryBean.setLoginUrl("/loginController/login");         shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);         return shiroFilterFactoryBean;      }     /*     * 创建 DefaultWebSecurityManager  用来管理用户主体的subject     * */     @Bean     public DefaultWebSecurityManager getDefaultWebSecurityManager(){         DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();          defaultWebSecurityManager.setRealm(getUserRealm());         return defaultWebSecurityManager;     }       // 使用哈希算法+盐值加密  需要给盐 和 次数       @Bean     public UserRealm getUserRealm(){         UserRealm userRealm = new UserRealm();         userRealm.setCredentialsMatcher(getHashedCredentialsMatcher());         return userRealm;     }     /*      *       设置哈希算法      * */      @Bean     public HashedCredentialsMatcher  getHashedCredentialsMatcher() {         //创建hashedCredentialsMatcher 对象         HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();         //指定加密方式  MD4 MD5 SHA-1 SHA-256 SHA-384 SHA-512         hashedCredentialsMatcher.setHashAlgorithmName("md5");         //设置加密次数   必须和UserRealm         hashedCredentialsMatcher.setHashIterations(1);         //设置加密的编码  true:加密使用的是HEX编码 false:base6编码         hashedCredentialsMatcher.setStoredCredentialsHexEncoded(true);         return hashedCredentialsMatcher;     } }
  UserRealm(认证) public class UserRealm extends AuthorizingRealm {      @Autowired     private UserServiceI userService;     @Override     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {         /*          * 执行授权逻辑          * */         System.out.println("》》》》》执行授权逻辑《《《《《《《");         return null;     }      @Override     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {          /*          * 执行认证逻辑          * */         System.out.println("》》》》》》》》》执行认证逻辑《《《《《《《《《《");         UsernamePasswordToken token = (UsernamePasswordToken)authenticationToken;         //调用数据库进行验证        TbUser user =  userService.findUserInfoByUserName(token.getUsername());         // 编写登录认证逻辑         if (!token.getUsername().equals(user.getTbUserName())){             return null;         }         //判断密码         //假设密码正确,也就是登陆成功后的用户密码,好比将他放入到session中         // 数据库查询出来的密码,shiro自动校验         //加的盐  ByteSource.Util.bytes(user.getTbSalt())         //假设密码正确,也就是登陆成功后的用户名          //盐相当于密钥         //shiro 加密方式 盐+次数  进行哈希加密         //         return new SimpleAuthenticationInfo(user,user.getTbUserPwd(), ByteSource.Util.bytes(user.getTbSalt()),user.getTbUserName());     }         //8fd2fae312c4e621271ea80088cac3a3     public static void main(String[] args) {         String s = ShiroUtils.encryptPassword("MD5", "1234", "c440e502", 1);         System.out.println(s);     } }
  ShiroUtils (随机生成 salt) public class ShiroUtils {     /**      * 随机生成 salt 需要指定 它的字符串的长度      *      * @param len 字符串的长度      * @return salt      */     public static String generateSalt(int len) {         //一个Byte占两个字节         int byteLen = len >> 1;         SecureRandomNumberGenerator secureRandom = new SecureRandomNumberGenerator();         return secureRandom.nextBytes(byteLen).toHex();     }      /**      * 获取加密后的密码,使用默认hash迭代的次数 1 次      *      * @param hashAlgorithm hash算法名称 MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512、etc。      * @param password      需要加密的密码      * @param salt          盐      * @return 加密后的密码      */     public static String encryptPassword(String hashAlgorithm, String password, String salt) {         return encryptPassword(hashAlgorithm, password, salt, 1);     }      /**      * 获取加密后的密码,需要指定 hash迭代的次数      *      * @param hashAlgorithm  hash算法名称 MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512、etc。      * @param password       需要加密的密码      * @param salt           盐      * @param hashIterations hash迭代的次数      * @return 加密后的密码      */     public static String encryptPassword(String hashAlgorithm, String password, String salt, int hashIterations) {         SimpleHash hash = new SimpleHash(hashAlgorithm, password, salt, hashIterations);         return hash.toString();     }      public static void main(String[] args) {         String s = ShiroUtils.generateSalt(8);         System.out.println(s);     } }

苹果XR,搭载A12处理器,当主力机也没问题2021生机大会说句实话,买这款手机就是买他的A12处理器,至于其他的配置其实也够用,这款手机和XS的最大区别就是一个是单摄,一个是双摄,而且屏幕也是XS的要好一些。还是那句话,买索尼WHXB910N头戴式无线降噪耳机开售售价1299元昨日,索尼WHXB910N头戴式无线降噪耳机正式开售,售价为1299元。据官方介绍,索尼WHXB910N耳机采用与WH1000XM4相同的双反馈麦克风,可灵敏地捕捉环境噪音。通过S曝三星Exynos2200GPU性能对比骁龙8处理器没有优势今天,博主i冰宇宙在社交平台爆料,三星即将发布的旗舰处理器Exynos2200芯片对比高通骁龙8依旧没有优势。i冰宇宙指出,原以为AMDGPU加持的Exynos2200芯片会让三星有哪些英语口语好的APP,海豚班AI了解一下一英语流利说是一款智能口语打分软件,应用于PC端或者手机端,内置各种口语练习场景,用户可以进行跟读模仿等练习,软件会根据自己发音匹配程度予以打分。另外还有各种学习圈子,在这里聚集着传三星微软合作AR项目产品预计2024年亮相韩国媒体TheElec近日报道称,三星电子已与微软合作启动一个基于HoloLens的AR项目。消息人士向TheElec透露三星于今年3月成立了负责该项目的工作组,这一项目于今年夏天iPhoneSE3价格曝光,还会有大屏幕版iPhoneSE苹果将会在明年的时候推出新款5G版iPhone手机iPhone14系列手机,目前关于iPhone14系列手机的爆料信息已经越来越多,根据爆料显示iPhone14系列手机有四款不同的vivo荣获最佳技术创新奖,它的杀手锏是什么?在竞争日益激烈的智能手机市场,为了满足消费者日益变化的用机需求,各大手机品牌围绕产品和技术层面不断创新,新品手机陆续面世,技术也在不断革新和优化,用一句你方唱罢我登台来形容再合适不如果联想当年选择倪光南,今天会怎样?历史没有如果。并且在当时的历史条件下中国科学院选择柳传志是不错的抉择。柳传志的问题在于联想改制之后其个人私欲无限膨胀,将国家和人民抛在脑后,导致联想出现现在的状况,这与一个共产党员互联网大裁员开始了,各位老铁们,Areyouready?前些年年年都在炒,互联网人工资有多高。最近几年发现炒作互联网人的工资没流量了,为啥呢,炒应届生工资高,可人均985211硕博的门槛太高,引不起共鸣炒老员工百万年薪,那更不行,门槛更现在买骁龙870,8256的手机还能用五年吗?保护得当五年后肯定能用的,聊聊微信玩玩小游戏不在话下,五年的变化太大了说不定你就发了呢,到时你就不是玩手机了是玩车和表微笑骁龙870和上一代骁龙旗舰865性能差不多!我们只需要看看英特尔CEO供应链问题将持续至2023年华尔街日报12月8日消息,英特尔和埃森哲CEO周二在华尔街日报举办的CEO理事会峰会上表示,对一些公司来说,波及整个美国经济的供应链问题正在改善,但长期修复可能需要更多时间。网上零
上阳赋首播翻车,41岁国际章出演少女,赵雅芝太出戏了由于上阳赋是章子怡的首部电视剧,受到的关注也是颇多。新剧预热期间,章子怡就拉上汪峰一起为新剧做宣传。其实热搜当天只要汪峰不出新歌就ok了,开个玩笑哈。剧中明星云集,我们不妨一看。演设计时尚大空间,吉利远景X6PRO还是家用首选吗?我们从吉利官方了解到,远景X6PRO车型将于9月21日正式上市。新车采用了全新的设计风格,整体辨识度更高,且更加时尚。凭借较高的性价比大空间赢得不少消费者的喜爱,远景X6也是吉利汽广汽本田新款雅阁预售17。98万元起集成最新科技配置天津车展期间,广汽本田新款雅阁进行了首发,并且官方公布了该车的预售价为17。98万元起,目前已经开始接受预订,据了解,新车将会在10月9日正式上市。作为中期改款车型,新款本田雅阁的谨慎入坑!荣耀智慧屏x1内存翻倍,仅售3699元?作为2020年度备受好评的大屏产品,荣耀智慧屏X1系列再度迎来新品上市。8月27日,荣耀智慧屏X165英寸4GB内存版本全新上市。今天,全新升级的4GB32GB版在京东开启首销,原阿维塔科技新车预告图对标极氪001?近日,阿维塔科技品牌首款车型的预告图曝光。作为一家全新的高端新能源品牌,阿维塔首款车采用了疑似轿跑车的造型设计,并且整体造型与极氪001较为相似。阿维塔科技首款车整体造型线条十分舒阿维塔科技新车预告图对标极氪001?近日,阿维塔科技品牌首款车型的预告图曝光。作为一家全新的高端新能源品牌,阿维塔首款车采用了疑似轿跑车的造型设计,并且整体造型与极氪001较为相似。阿维塔科技首款车整体造型线条十分舒长城重启轿车项目余飞调任WEY轿车品牌总经理首款轿车将曝光日前,从多个媒体了解到,长城汽车欧拉品牌营销总经理余飞发生岗位变动,将调往长城旗下高端品牌WEY品牌任轿车品牌总经理。这意味着,长城汽车WEY品牌轿车项目正在稳步推进,从轿车项目叫明星大侦探提档啦!何炅吴昕扮野人吐槽大会5也等到了好消息!明星大侦探提档啦!吐槽大会5也终于等到了!这下综艺的时间也错开了!网友可以自行安排时间,周三周四看明星大侦探周五看浪姐2了,两不耽误。明星大侦探6提档了,真是太开心了!从过GRACEKELLY原创设计婚纱展一线女明星的审美狙击2021年10月26日,原创设计师联名品牌全球名品婚纱礼服买手店,享誉盛名的奢华婚纱礼服品牌GRACEKELLY,打造了一场如梦如幻的设计师婚纱礼服展。集齐品牌长期合作韩国顶尖婚纱做时间管理专家,适合学生党的腕表推荐手表作为可穿戴设备,能够提供快速读时间信息的功能,佩戴腕表的人给别人一种守时靠谱的形象,高端腕表在身份,品味方面的体现无可替代,作为学生党,纯读时工具对时间利用更有帮助,避免浪费时TriPollar初普StopVxGold2女明星也在用的高颜值家用美容仪TriPollar初普对于女性来说是个不小的福利,对于已经步入20工作压力大还经常熬夜的人来说,皮肤的护理真的相当重要,一不小心各种危肌就开始蠢蠢欲动了,保养真的宜早不宜迟。保养这