shiro如何添加用户信息
时间: 2023-08-05 17:49:31 浏览: 97
Springboot+Shiro记录用户登录信息并获取当前登录用户信息的实现代码
5星 · 资源好评率100%
在 Shiro 中,添加用户信息的方式取决于你的应用程序,通常需要通过数据库或其他数据存储方式来保存用户信息。一般来说,我们需要将用户信息封装在一个实体类中,例如 User 类,然后将 User 对象保存到数据库中或其他数据存储方式中。
在进行用户登录时,我们通常需要从数据库或其他数据存储方式中获取用户信息,然后将其封装为一个 Principal 对象,返回给 Shiro 进行身份认证。Principal 对象通常是一个包含用户身份信息的对象,例如 User 对象或包含用户名、用户 ID 等信息的 DTO 对象。
在 Shiro 中,可以通过实现 Realm 接口来提供身份认证所需的用户信息。Realm 是 Shiro 的一个核心概念,用于获取用户的身份信息、角色、权限等,并对其进行认证和授权。我们可以自定义一个 Realm 实现类,实现 doGetAuthenticationInfo() 方法来获取用户的身份信息,例如:
```
public class MyRealm extends AuthorizingRealm {
// 实现 doGetAuthenticationInfo() 方法来获取用户的身份信息
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
// 获取用户名和密码等信息
String username = (String) token.getPrincipal();
String password = new String((char[]) token.getCredentials());
// 从数据库或其他数据存储方式中获取用户信息
User user = userService.getUserByUsername(username);
// 判断用户是否存在及密码是否正确
if (user == null) {
throw new UnknownAccountException("User does not exist");
}
if (!user.getPassword().equals(password)) {
throw new IncorrectCredentialsException("Incorrect password");
}
// 将用户信息封装为一个 Principal 对象,返回给 Shiro 进行身份认证
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, password, getName());
return info;
}
// 实现 doGetAuthorizationInfo() 方法来进行授权操作
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
// TODO: 实现授权操作
return null;
}
}
```
在上面的示例代码中,我们实现了一个自定义的 Realm 类 MyRealm,并重写了 doGetAuthenticationInfo() 方法来获取用户的身份信息。在该方法中,我们首先获取用户名和密码等信息,然后从数据库或其他数据存储方式中获取用户信息。如果用户不存在或密码不正确,将抛出相应的异常。最后,将用户信息封装为一个 Principal 对象,并返回给 Shiro 进行身份认证。
需要注意的是,为了使 Shiro 能够使用我们自定义的 Realm 实现类,我们需要将其配置到 Shiro 的安全管理器中。具体配置方式取决于你的应用程序,可以参考 Shiro 的官方文档进行配置。
阅读全文