Shiro【自定义Realm 、多Realm认证 、多Realm认证策略、异常处理】(四)-全面详解(学习总结---从入门到深化)
发布人:shili8
发布时间:2024-11-07 20:40
阅读次数:0
**Shiro Realm 的全面详解**
在 Shiro 中,Realm 是一个非常重要的概念,它负责认证和授权。Shiro 提供了多种 Realm 的实现方式,让我们可以根据实际需求来选择合适的 Realm。
**自定义 Realm**
自定义 Realm 是一种最灵活的 Realm 实现方式。在这种方式下,我们可以根据自己的需求来编写 Realm 的实现类。
###例子:自定义 Realm
javapublic class MyRealm extends AuthorizationRealm { @Override public boolean execute(Subject subject, AuthenticationInfo info) throws AuthenticationException { // 自定义认证逻辑 String username = (String) info.getPrincipal(); String password = (String) info.getCredentials(); if ("admin".equals(username) && "123456".equals(password)) { return true; } return false; } }
在上面的例子中,我们定义了一个自定义 Realm `MyRealm`,它继承于 `AuthorizationRealm`。我们覆盖了 `execute` 方法来实现自己的认证逻辑。
###例子:自定义 Realm 的配置
javapublic class MyShiroConfig { @Bean public SecurityManager securityManager() { DefaultSecurityManager manager = new DefaultSecurityManager(); // 配置自定义 Realm Maprealms = new HashMap<>(); realms.put("myRealm", new MyRealm()); manager.setRealms(realms); return manager; } }
在上面的例子中,我们配置了一个自定义 Realm `MyRealm`,并将其添加到 Shiro 的 Realm 集合中。
**多 Realm 认证**
Shiro 支持多 Realm 认证,这意味着我们可以使用多个 Realm 来认证用户。这种方式非常灵活,可以根据实际需求来选择合适的 Realm。
###例子:多 Realm 认证
javapublic class MyRealm1 extends AuthorizationRealm { @Override public boolean execute(Subject subject, AuthenticationInfo info) throws AuthenticationException { // Realm1 的认证逻辑 return true; } } public class MyRealm2 extends AuthorizationRealm { @Override public boolean execute(Subject subject, AuthenticationInfo info) throws AuthenticationException { // Realm2 的认证逻辑 return true; } }
在上面的例子中,我们定义了两个自定义 Realm `MyRealm1` 和 `MyRealm2`。我们可以根据实际需求来选择哪个 Realm 来进行认证。
###例子:多 Realm 认证的配置
javapublic class MyShiroConfig { @Bean public SecurityManager securityManager() { DefaultSecurityManager manager = new DefaultSecurityManager(); // 配置多 Realm Maprealms = new HashMap<>(); realms.put("realm1", new MyRealm1()); realms.put("realm2", new MyRealm2()); manager.setRealms(realms); return manager; } }
在上面的例子中,我们配置了多个 Realm `MyRealm1` 和 `MyRealm2`,并将其添加到 Shiro 的 Realm 集合中。
**多 Realm 认证策略**
Shiro 支持多 Realm 认证策略,这意味着我们可以根据实际需求来选择合适的认证策略。
###例子:多 Realm 认证策略
javapublic class MyRealm1 extends AuthorizationRealm { @Override public boolean execute(Subject subject, AuthenticationInfo info) throws AuthenticationException { // Realm1 的认证逻辑 return true; } } public class MyRealm2 extends AuthorizationRealm { @Override public boolean execute(Subject subject, AuthenticationInfo info) throws AuthenticationException { // Realm2 的认证逻辑 return true; } }
在上面的例子中,我们定义了两个自定义 Realm `MyRealm1` 和 `MyRealm2`。我们可以根据实际需求来选择哪个 Realm 来进行认证。
###例子:多 Realm 认证策略的配置
javapublic class MyShiroConfig { @Bean public SecurityManager securityManager() { DefaultSecurityManager manager = new DefaultSecurityManager(); // 配置多 Realm 认证策略 Maprealms = new HashMap<>(); realms.put("realm1", new MyRealm1()); realms.put("realm2", new MyRealm2()); manager.setRealms(realms); return manager; } }
在上面的例子中,我们配置了多个 Realm `MyRealm1` 和 `MyRealm2`,并将其添加到 Shiro 的 Realm 集合中。
**异常处理**
Shiro 支持异常处理,这意味着我们可以根据实际需求来选择合适的异常处理方式。
###例子:异常处理
javapublic class MyRealm extends AuthorizationRealm { @Override public boolean execute(Subject subject, AuthenticationInfo info) throws AuthenticationException { try { // Realm 的认证逻辑 return true; } catch (AuthenticationException e) { // 异常处理逻辑 throw new AuthenticationException("认证失败", e); } } }
在上面的例子中,我们定义了一个自定义 Realm `MyRealm`,它继承于 `AuthorizationRealm`。我们覆盖了 `execute` 方法来实现自己的认证逻辑,并添加异常处理逻辑。
###例子:异常处理的配置
javapublic class MyShiroConfig { @Bean public SecurityManager securityManager() { DefaultSecurityManager manager = new DefaultSecurityManager(); // 配置 Realm Maprealms = new HashMap<>(); realms.put("realm", new MyRealm()); manager.setRealms(realms); return manager; } }
在上面的例子中,我们配置了一个自定义 Realm `MyRealm`,并将其添加到 Shiro 的 Realm 集合中。
通过以上的例子和代码注释,我们可以看到Shiro支持多种Realm的实现方式,让我们可以根据实际需求来选择合适的Realm。同时,Shiro也支持异常处理,这意味着我们可以根据实际需求来选择合适的异常处理方式。