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

英文网站建设哪家好万网网站备案管理

英文网站建设哪家好,万网网站备案管理,大型网站建设企业名录模板,重庆是哪个省划分出来的一、会话相关API及会话使用 Shiro提供了完整的企业级会话管理功能#xff0c;不依赖于底层容器#xff08;如Web容器Tomcat#xff09;#xff0c;可以在JavaSE和JavaEE环境中使用。会话相关API主要包括#xff1a; Subject.getSession(): 获取当前用户的会话#xff0…一、会话相关API及会话使用 Shiro提供了完整的企业级会话管理功能不依赖于底层容器如Web容器Tomcat可以在JavaSE和JavaEE环境中使用。会话相关API主要包括 Subject.getSession(): 获取当前用户的会话如果当前没有创建会话对象则会创建一个新的会话。这等价于Subject.getSession(true)。Subject.getSession(boolean create): 根据参数决定是否创建一个新的会话。如果create为true且当前没有会话则创建一个新的会话如果为false且当前没有会话则返回null。session.setAttribute(key, value): 设置会话属性。session.getAttribute(key): 获取会话属性。session.removeAttribute(key): 删除会话属性。 会话使用时建议在Controller层使用原生的HttpSession对象在Service层使用Shiro提供的Session对象。 二、缓存 问题分析 在每次访问设置了权限的页面时Shiro都会执行doGetAuthorizationInfo()方法来获取权限信息。这可能导致性能问题因为每次请求都需要重新计算权限。 解决办法 对权限授权数据进行缓存处理。可以使用第三方的Shiro-Redis集成Redis来实现缓存。 具体实现 在Shiro配置类中配置Redis缓存管理器。在自定义Realm中使用缓存管理器来缓存权限信息。在用户登录或权限变更时手动清除缓存中的旧权限信息。 示例代码Spring Boot环境 // Shiro配置类 Configuration public class ShiroConfig { // ... Bean public RedisCacheManager cacheManager(RedisManager redisManager) { RedisCacheManager cacheManager new RedisCacheManager(); cacheManager.setRedisManager(redisManager); return cacheManager; } // ... } // 自定义Realm public class CustomRealm extends AuthorizingRealm { // ... Autowired private RedisCacheManager cacheManager; Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { // 从缓存中获取权限信息 String cacheKey getAuthorizationCacheKey(principals); AuthorizationInfo cachedAuthInfo (AuthorizationInfo) cacheManager.getCache(authorizationCache).get(cacheKey); if (cachedAuthInfo ! null) { return cachedAuthInfo; } // 如果缓存中没有则查询数据库并缓存结果 AuthorizationInfo authInfo // 查询数据库获取权限信息 cacheManager.getCache(authorizationCache).put(cacheKey, authInfo); return authInfo; } // ... private String getAuthorizationCacheKey(PrincipalCollection principals) { // 生成缓存键例如使用用户名 return principals.getPrimaryPrincipal().toString(); } // 清除缓存的方法 public void clearCachedAuthorizationInfo(PrincipalCollection principals) { String cacheKey getAuthorizationCacheKey(principals); cacheManager.getCache(authorizationCache).remove(cacheKey); } } 演示测试 在测试环境中可以通过模拟用户登录和访问受保护资源来验证缓存是否生效。观察日志或调试信息确认Shiro是否从缓存中获取了权限信息而不是每次都查询数据库。 三、加密 哈希与盐 为了增强密码的安全性Shiro支持使用哈希算法对密码进行加密并可以添加盐值以防止彩虹表攻击。 加密与验证 在Shiro中可以通过配置HashedCredentialsMatcher来实现密码的哈希加密和验证。HashedCredentialsMatcher可以设置哈希算法如MD5、SHA-256等和哈希迭代次数。 具体实现 在Shiro配置类中配置HashedCredentialsMatcher。在自定义Realm中使用HashedCredentialsMatcher进行密码验证。 示例代码 // Shiro配置类 Configuration public class ShiroConfig { // ... Bean public HashedCredentialsMatcher hashedCredentialsMatcher() { HashedCredentialsMatcher hashedCredentialsMatcher new HashedCredentialsMatcher(); hashedCredentialsMatcher.setHashAlgorithmName(MD5); // 设置哈希算法 hashedCredentialsMatcher.setHashIterations(1024); // 设置哈希迭代次数 return hashedCredentialsMatcher; } Bean public SecurityManager securityManager(CustomRealm customRealm) { DefaultWebSecurityManager securityManager new DefaultWebSecurityManager(); securityManager.setRealm(customRealm); securityManager.setCredentialsMatcher(hashedCredentialsMatcher()); // 设置密码加密验证器 return securityManager; } // ... } // 自定义Realm public class CustomRealm extends AuthorizingRealm { // ... Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { UsernamePasswordToken upToken (UsernamePasswordToken) token; String username upToken.getUsername(); // 查询数据库获取用户信息 User user userService.findUserByName(username); if (user null) { throw new UnknownAccountException(用户不存在); } // 返回认证信息包含用户名、密码已加密、盐值和Realm名称 return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), ByteSource.Util.bytes(user.getSalt()), getName()); } // ... } 在上面的代码中User类应该包含用户名、密码已加密、盐值等属性。在注册用户时应该使用与HashedCredentialsMatcher相同的哈希算法和迭代次数对密码进行加密并将加密后的密码和盐值存储在数据库中。 四、登录次数限制 Shiro本身没有直接提供登录次数限制的功能但可以通过自定义Realm或拦截器来实现。例如可以在自定义Realm中维护一个登录失败次数的计数器当登录失败次数超过一定限制时可以锁定用户账户或增加额外的验证步骤。 实现登录次数限制的示例代码简化版 // 自定义Realm public class CustomRealm extends AuthorizingRealm { // ... private MapString, Integer loginFailureCounts new ConcurrentHashMap(); // 登录失败次数计数器 private static final int MAX_FAILURE_COUNT 5; // 最大失败次数限制 Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { UsernamePasswordToken upToken (UsernamePasswordToken) token; String username upToken.getUsername(); // 检查登录失败次数是否超过限制 if (loginFailureCounts.getOrDefault(username, 0) MAX_FAILURE_COUNT) { throw new LockedAccountException(账户已被锁定请稍后再试); } // 查询数据库获取用户信息 User user userService.findUserByName(username); if (user null) { // 登录失败增加失败次数计数器 loginFailureCounts.put(username, loginFailureCounts.getOrDefault(username, 0) 1); throw new UnknownAccountException(用户不存在); } // 验证密码省略具体实现 // ... // 登录成功清除失败次数计数器 loginFailureCounts.remove(username); // 返回认证信息 return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), ByteSource.Util.bytes(user.getSalt()), getName()); } // ... }
http://www.eeditor.cn/news/120498/

相关文章:

  • jsp做的网站运行都需要什么百度热议排名软件
  • 个人信息网站模板网站制作网免费
  • 软件wap网站PPT做的好的有哪些网站
  • 创建网站需要学什么知识新媒体营销的优势
  • 用vs2010做网站登入cn域名多少钱一年
  • 徐州企业网站制作eyoucms教程
  • 华为公司网站建设方案模板wordpress 5.0.3修改注册页
  • 网站备案换接入商wordpress媒体库下载
  • 荆州市城市建设投资开发有限公司网站深圳整站
  • 网站推广途径和推广要点的案例讨论工业设计软件有哪些软件
  • 网站屏蔽ip地址移动网站开发技术
  • 网站免费正能量下载商业网站设计与制作
  • 中国风 古典 红色 网站源代码免费职业技能培训网站
  • 网站建设公司的政策风险网页制作工具分为
  • 网站开发设计书查看网站服务器信息
  • 有没有专门做衣服搭配的网站网站结构模板
  • 电商网站建设模型图医疗网站前置审批
  • 设计类专业介绍seo搜索排名优化公司
  • 网站都有哪些一般网站要多大空间
  • 中国电力建设股份有限公司官方网站海外网络推广招聘
  • 一个网站要注意哪些问题wordpress ftp 插件
  • 如何建设旅游网站浙江省建设工程造价协会网站
  • 公司网站的搭建方案做网站需要准备的工具
  • 做ppt找图片在哪个网站app设计流程
  • 广州网站设计专注乐云seo哈尔滨网站建设方案维护
  • access如何与网站连接数据库网站定制公司排行榜
  • 做好的网站模板怎么修改wordpress快讯
  • 青岛优化网站多少钱贸易公司logo图片
  • 长沙建网站的公司一对一定制方案现在建设网站赚钱吗
  • 网站备案要注意什么我爱你域名的网站