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

深圳龙岗淘宝网站建设公司有哪些wordpress首饰商城系统

深圳龙岗淘宝网站建设公司有哪些,wordpress首饰商城系统,网站建设的评价,静海区网站建设推广RealmRealm的作用Realm的实现Realm的配置实例在Shiro中#xff0c;Realm是一个非常灵活和强大的安全组件#xff0c;它能够与各种数据源进行集成#xff0c;满足各种安全需求。通过实现自定义的Realm#xff0c;我们可以轻松地定制身份验证、授权和加密逻辑#xff0c;实现… RealmRealm的作用Realm的实现Realm的配置实例在Shiro中Realm是一个非常灵活和强大的安全组件它能够与各种数据源进行集成满足各种安全需求。通过实现自定义的Realm我们可以轻松地定制身份验证、授权和加密逻辑实现更加细粒度的访问控制。在使用Realm时我们需要将其配置到SecurityManager中并通过配置文件或编程方式来指定使用哪些Realm。Shiro提供了多个默认的Realm实现例如IniRealm和JdbcRealm我们也可以通过继承AbstractAuthorizingRealm或AbstractAuthenticatingRealm来创建自定义的Realm实现。 Realm的作用 Realm的主要作用是执行身份验证和授权操作。当一个Subject需要进行身份验证时它会调用SecurityManager中的authenticate方法该方法会委托给所有配置的Realm来进行身份验证。当验证成功后Realm会返回一个SimpleAuthenticationInfo对象其中包含了身份验证信息如用户名、密码等这些信息会在会话管理中使用。 当一个Subject需要进行授权操作时它会调用SecurityManager中的authorize方法该方法会委托给所有配置的Realm来进行授权操作。Realm会返回一个AuthorizationInfo对象其中包含了该Subject的所有权限信息如角色、权限等这些信息会被用于控制Subject在应用程序中的访问权限。 除了身份验证和授权操作之外Realm还可以用于加密和解密操作。例如使用Realm中的CredentialsMatcher接口可以对密码进行加密和验证。 Realm的实现 Realm是一个接口它定义了一系列方法用于处理身份验证和授权操作。在实际应用中我们可以通过实现自定义的Realm来满足不同的安全需求。Shiro提供了多个默认的Realm实现包括 IniRealm通过一个INI配置文件来存储用户、角色和权限信息。JdbcRealm通过JDBC来访问数据库存储用户、角色和权限信息。ActiveDirectoryRealm通过LDAP协议来访问Active Directory存储用户、角色和权限信息。LdapRealm通过LDAP协议来访问LDAP服务器存储用户、角色和权限信息。TextConfigurationRealm通过一个文本文件来存储用户、角色和权限信息。 此外我们也可以通过继承AbstractAuthorizingRealm或AbstractAuthenticatingRealm来创建自定义的Realm实现。 Realm的配置 在使用Realm时我们需要将其配置到SecurityManager中。Shiro提供了一个ini配置文件来方便地进行配置。在ini配置文件中我们可以使用[main]部分来配置SecurityManager并通过配置securityManager.realms属性来指定使用哪些Realm。 例如下面的配置文件中使用了IniRealm和JdbcRealm来实现身份验证和授权操作 [main] securityManager.realms $iniRealm, $jdbcRealm[iniRealm] # IniRealm的配置[jdbcRealm] # JdbcRealm的配置 在实际应用中我们也可以通过编程方式来配置Realm例如 IniRealm iniRealm new IniRealm(classpath:shiro.ini); JdbcRealm jdbcRealm new JdbcRealm(); securityManager.setRealms(Arrays.asList(iniRealm, jdbcRealm)); 实例 下面是一个自定义的Realm实现该Realm实现基于数据库进行身份验证和授权操作 public class CustomRealm extends AuthorizingRealm {private UserService userService; // UserService为自定义的用户服务接口public CustomRealm(UserService userService) {this.userService userService;}/*** 认证方法用于身份验证*/Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {UsernamePasswordToken upToken (UsernamePasswordToken) token;String username upToken.getUsername();User user userService.getUserByUsername(username);if (user null) {throw new UnknownAccountException(用户不存在);}String password user.getPassword(); // 从数据库中获取密码SimpleAuthenticationInfo info new SimpleAuthenticationInfo(username, password, getName());return info;}/*** 授权方法用于权限控制*/Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {String username (String) principals.getPrimaryPrincipal();User user userService.getUserByUsername(username);SimpleAuthorizationInfo info new SimpleAuthorizationInfo();for (Role role : user.getRoles()) {info.addRole(role.getName()); // 添加角色for (Permission permission : role.getPermissions()) {info.addStringPermission(permission.getName()); // 添加权限}}return info;} } 上述代码中CustomRealm继承了AuthorizingRealm类并实现了doGetAuthenticationInfo和doGetAuthorizationInfo方法用于身份验证和授权操作。在认证方法中我们首先从传入的token中获取用户名然后通过userService从数据库中获取用户信息如果用户不存在则抛出异常否则将密码信息封装在SimpleAuthenticationInfo对象中返回。 在授权方法中我们首先从PrincipalCollection中获取用户名然后通过userService从数据库中获取用户信息。我们将用户的所有角色和权限信息添加到SimpleAuthorizationInfo对象中并将该对象返回。这样当Subject需要进行授权操作时CustomRealm就会被调用返回该Subject的所有权限信息。 需要注意的是CustomRealm中的userService需要通过构造函数进行注入以便从外部获取用户信息。另外在使用CustomRealm时我们需要将其配置到SecurityManager中。例如下面的代码演示了如何将CustomRealm配置到SecurityManager中 CustomRealm customRealm new CustomRealm(userService); DefaultSecurityManager securityManager new DefaultSecurityManager(); securityManager.setRealm(customRealm); SecurityUtils.setSecurityManager(securityManager); 通过上述代码我们可以将CustomRealm配置到SecurityManager中并使用该SecurityManager进行身份验证和授权操作。 除了上述示例中的基于数据库的自定义Realm实现我们还可以根据具体的业务需求实现各种自定义Realm例如 基于LDAP的Realm通过LDAP协议验证用户身份和获取用户授权信息。基于OAuth的Realm通过OAuth协议验证用户身份和获取用户授权信息。基于第三方API的Realm通过调用第三方API验证用户身份和获取用户授权信息。 下面是一个基于LDAP的自定义Realm示例 public class LdapRealm extends AuthenticatingRealm {private LdapContextFactory contextFactory;public LdapRealm(LdapContextFactory contextFactory) {this.contextFactory contextFactory;}Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {UsernamePasswordToken upToken (UsernamePasswordToken) token;String username upToken.getUsername();String password new String(upToken.getPassword());try {LdapContext ldapContext contextFactory.getLdapContext(username, password);ldapContext.close();} catch (AuthenticationException e) {throw new IncorrectCredentialsException(用户名或密码不正确);} catch (NamingException e) {throw new AuthenticationException(无法连接到LDAP服务器);}return new SimpleAuthenticationInfo(username, password, getName());} } 在上述代码中我们实现了基于LDAP协议的身份验证逻辑。我们通过 LdapContextFactory获取LDAP连接并使用用户名和密码进行身份验证。如果验证失败则抛出异常否则将用户名和密码封装在SimpleAuthenticationInfo对象中返回。 需要注意的是LdapContextFactory是一个自定义的工厂类用于创建LDAP连接。该工厂类需要根据具体的LDAP服务器配置进行实现。 通过自定义Realm实现我们可以灵活地扩展Shiro的功能满足各种不同的安全需求。
http://www.dnsts.com.cn/news/235931.html

相关文章:

  • 贵州网站建设 零玖伍壹网络推广及建设网站
  • 网站app公众号先做哪个比较好网上商城交易平台
  • 网站 备案 哪个省百度免费推广平台
  • 网站模板怎么建站cad做彩图那个网站应用好用
  • 勒流网站建设制作网站设计公司排名知乎
  • 网站开发什么叫前端后端公关就是陪人睡觉吗
  • 联通网站自主备案系统企业网站备案要钱吗
  • 河南省建设注册执业中心网站广州市建设交易服务中心网站
  • 配资网站建设是什么意思phpcms 专题网站模板
  • 完成网站的建设工作中英文网站模板
  • 做印刷品去哪个网站超酷的网站设计
  • 新建网站的价格传奇
  • gta5网站建设网站建设方案书 本案
  • 昭通网站seo优化济南集团网站建设方案
  • 软件编程和网站开发差别珠江摩尔网站建设
  • 做网站python和php哪个好学大连市英文网站建设
  • 新乡市延津县建设局网站青岛网站建设定制开发
  • 烟台龙口网站建设wordpress设计师主题
  • 微信企业网站 源码下载怎么把WordPress和域名解绑
  • 如何免费做网站优化wordpress付费查看内容
  • 网站建设与管理可以专升本吗互联网门户网站建设
  • 小说网站建设源码网站标题一样
  • 石家庄房产信息网站织梦技术网站模版
  • wordpress图文发布seo是什么意思电商
  • 找大学生做网站要多少钱鄂尔多斯北京网站建设
  • 赣州做网站的深圳建设网站公司哪儿济南兴田德润有活动吗
  • 学校网站开发程序liunx做网站跳转
  • 建立一个网站需要多少钱常州网站网站建设
  • 做农产品的网站名称做字的网站
  • 网站开发7个基本流程建立平台网站需要花多少钱