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 Map realms = 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 Map realms = 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 认证策略 Map realms = 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 Map realms = new HashMap<>();
realms.put("realm", new MyRealm());
manager.setRealms(realms);
return manager;
}
}
在上面的例子中,我们配置了一个自定义 Realm `MyRealm`,并将其添加到 Shiro 的 Realm 集合中。
通过以上的例子和代码注释,我们可以看到Shiro支持多种Realm的实现方式,让我们可以根据实际需求来选择合适的Realm。同时,Shiro也支持异常处理,这意味着我们可以根据实际需求来选择合适的异常处理方式。

