shiro权限验证代码
时间: 2023-07-06 14:24:59 浏览: 91
shiro权限代码
Shiro 是一个强大的 Java 安全框架,提供了身份认证、授权、加密等功能。以下是一个简单的 Shiro 权限验证代码示例:
1. 配置 Shiro 安全管理器
```java
// 创建一个 DefaultSecurityManager 对象
DefaultSecurityManager securityManager = new DefaultSecurityManager();
// 设置 Realm
securityManager.setRealm(myRealm);
// 将 SecurityManager 设置为全局的安全管理器
SecurityUtils.setSecurityManager(securityManager);
```
2. 创建一个自定义 Realm 类
```java
public class MyRealm extends AuthorizingRealm {
// 授权方法
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
// 获取当前用户
String username = (String) principals.getPrimaryPrincipal();
// 根据用户名查询该用户的角色和权限
Set<String> roles = userService.findRolesByUsername(username);
Set<String> permissions = userService.findPermissionsByUsername(username);
// 创建 SimpleAuthorizationInfo 对象,并设置角色和权限
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
authorizationInfo.setRoles(roles);
authorizationInfo.setStringPermissions(permissions);
return authorizationInfo;
}
// 认证方法
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
// 获取用户名和密码
String username = (String) token.getPrincipal();
String password = new String((char[]) token.getCredentials());
// 查询用户是否存在
User user = userService.findByUsername(username);
if (user == null) {
throw new UnknownAccountException("用户不存在");
}
// 验证密码
if (!passwordEncoder.matches(password, user.getPassword())) {
throw new IncorrectCredentialsException("密码错误");
}
// 创建 SimpleAuthenticationInfo 对象,并设置用户名和密码
SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(username, password, getName());
return authenticationInfo;
}
}
```
3. 在 Controller 中进行权限验证
```java
@Controller
public class UserController {
@RequiresPermissions("user:list")
@GetMapping("/user/list")
public String list() {
// 用户列表页面
return "user/list";
}
@RequiresPermissions("user:add")
@GetMapping("/user/add")
public String add() {
// 添加用户页面
return "user/add";
}
@RequiresPermissions("user:edit")
@GetMapping("/user/edit")
public String edit() {
// 编辑用户页面
return "user/edit";
}
}
```
在上述代码中,@RequiresPermissions 注解表示该方法需要进行权限验证。如果当前用户拥有对应的权限,则可以访问该方法;否则将抛出 UnauthorizedException 异常。
阅读全文