下面我将为您详细讲解“SpringBoot整合Shiro实现权限控制的代码实现”的完整攻略,主要分为以下几个步骤:
1. 引入相关依赖
在 pom.xml 中添加以下依赖:
<dependencies>
<!-- SpringBoot相关依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Shiro相关依赖 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.6.0</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
2. 配置Shiro
在 application.yml 中添加以下配置:
# Shiro配置
shiro:
# 登录地址
loginUrl: /login
# 权限拒绝时重定向的地址
unauthorizedUrl: /403
# ShiroFilter配置
filterChainDefinitions:
/login: anon
/logout: anon
/**: authc
# 自定义Realm
realm:
type: com.example.shirodemo.shiro.MyRealm
3. 自定义Realm
我们需要自定义一个 Realm 类,继承 AuthorizingRealm 类,实现其 doGetAuthorizationInfo 和 doGetAuthenticationInfo 两个方法,这两个方法分别用于授权和认证。
以下是示例代码:
@Slf4j
public class MyRealm extends AuthorizingRealm {
/**
* 授权
*
* @param principals
* @return
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
// 添加授权信息
authorizationInfo.addRole("admin");
authorizationInfo.addStringPermission("user:create");
authorizationInfo.addStringPermission("user:update");
return authorizationInfo;
}
/**
* 认证
*
* @param authenticationToken
* @return
* @throws AuthenticationException
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken)
throws AuthenticationException {
log.info("doGetAuthenticationInfo:" + authenticationToken);
// 根据用户名获取用户信息
String username = authenticationToken.getPrincipal().toString();
// 这里模拟数据库中的密码
String password = "123456";
if (StringUtils.isEmpty(username)) {
throw new AccountException("用户名不能为空");
}
// 密码认证
SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(username, password, getName());
return authenticationInfo;
}
}
4. 编写Controller
编写一个简单的Controller做测试:
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
@GetMapping("/create")
public String createUser() {
log.info("createUser...");
return "createUser...";
}
@GetMapping("/update")
public String updateUser() {
log.info("updateUser...");
return "updateUser...";
}
}
5. 测试
启动应用,访问 http://localhost:8080/login 进行登录,登录成功后再访问 http://localhost:8080/user/create,将会因为没有 user:create 授权而被拒绝,跳转到 403 页面。
以上就是 SpringBoot 整合 Shiro 实现权限控制的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot整合Shiro实现权限控制的代码实现 - Python技术站