您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# SpringBoot整合Shiro的步骤是什么
Apache Shiro是一个强大且易用的Java安全框架,用于身份验证、授权、加密等。在SpringBoot项目中整合Shiro可以快速实现权限控制。以下是详细整合步骤:
---
## 一、环境准备
1. **创建SpringBoot项目**
使用Spring Initializr创建项目,勾选Web依赖(如Spring Web)。
2. **添加Shiro依赖**
在`pom.xml`中添加Shiro和Spring整合包:
```xml
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-starter</artifactId>
<version>1.11.0</version>
</dependency>
继承AuthorizingRealm
,实现认证和授权逻辑:
public class CustomRealm extends AuthorizingRealm {
// 认证(登录校验)
@Override
protected AuthenticationInfo doGetAuthenticationInfo(
AuthenticationToken token) throws AuthenticationException {
// 从数据库查询用户信息并校验
return new SimpleAuthenticationInfo(username, password, getName());
}
// 授权(权限校验)
@Override
protected AuthorizationInfo doGetAuthorizationInfo(
PrincipalCollection principals) {
// 添加角色和权限
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
info.addRole("admin");
info.addStringPermission("user:delete");
return info;
}
}
创建配置类ShiroConfig
:
@Configuration
public class ShiroConfig {
@Bean
public Realm customRealm() {
return new CustomRealm();
}
@Bean
public DefaultWebSecurityManager securityManager(Realm realm) {
DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
manager.setRealm(realm);
return manager;
}
@Bean
public ShiroFilterFactoryBean shiroFilter(DefaultWebSecurityManager manager) {
ShiroFilterFactoryBean factory = new ShiroFilterFactoryBean();
factory.setSecurityManager(manager);
// 设置拦截规则
Map<String, String> filterMap = new LinkedHashMap<>();
filterMap.put("/login", "anon"); // 放行登录页
filterMap.put("/**", "authc"); // 其他路径需认证
factory.setFilterChainDefinitionMap(filterMap);
return factory;
}
}
@PostMapping("/login")
public String login(String username, String password) {
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
try {
subject.login(token); // 触发Realm的认证逻辑
return "登录成功";
} catch (AuthenticationException e) {
return "用户名或密码错误";
}
}
在Controller方法上添加权限注解:
@RequiresRoles("admin") // 需要admin角色
@RequiresPermissions("user:delete") // 需要删除权限
@GetMapping("/delete")
public String deleteUser() {
return "删除成功";
}
Session管理
默认使用Servlet容器的Session,可集成Redis实现分布式Session。
密码加密
建议使用HashedCredentialsMatcher
配置密码加密算法(如MD5+Salt)。
跨域问题
若前后端分离,需在Shiro过滤器中放行OPTIONS请求。
通过以上步骤即可完成SpringBoot与Shiro的整合,实现灵活的权限管理。完整代码可参考GitHub示例。 “`
注:本文代码基于Shiro 1.x版本,若使用Shiro 2.x需注意部分API变动。实际开发中建议结合具体业务调整Realm逻辑。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。