在Shiro中定义自己的Realm,可以按照以下步骤进行:
-
创建自定义Realm类:
public class MyCustomRealm extends AuthorizingRealm { @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { // 实现获取用户权限信息的逻辑 SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); // 示例:authorizationInfo.addRole("admin"); // 示例:authorizationInfo.addStringPermission("user:read"); return authorizationInfo; } @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { // 实现用户身份验证的逻辑 String username = (String) token.getPrincipal(); // 示例:从数据库或其他数据源获取用户信息 // 如果用户不存在,抛出UnknownAccountException // 如果密码错误,抛出IncorrectCredentialsException return new SimpleAuthenticationInfo(username, "passwordFromDataSource", getName()); } }
-
在Shiro配置中注册自定义Realm:
-
如果使用Spring配置:
<bean id="myCustomRealm" class="com.example.MyCustomRealm"/> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="myCustomRealm"/> </bean>
-
如果使用Shiro.ini配置:
[main] myCustomRealm = com.example.MyCustomRealm securityManager.realms = $myCustomRealm
-
通过以上步骤,就可以在Shiro中定义并使用自定义的Realm。