SpringBoot整合Shiro的步骤是什么

发布时间:2021-12-02 16:16:45 作者:柒染
来源:亿速云 阅读:149
# 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>

二、核心配置

1. 自定义Realm

继承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;
    }
}

2. 配置Shiro

创建配置类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;
    }
}

三、登录与权限控制

1. 登录接口

@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 "用户名或密码错误";
    }
}

2. 注解权限控制

在Controller方法上添加权限注解:

@RequiresRoles("admin")       // 需要admin角色
@RequiresPermissions("user:delete")  // 需要删除权限
@GetMapping("/delete")
public String deleteUser() {
    return "删除成功";
}

四、常见问题

  1. Session管理
    默认使用Servlet容器的Session,可集成Redis实现分布式Session。

  2. 密码加密
    建议使用HashedCredentialsMatcher配置密码加密算法(如MD5+Salt)。

  3. 跨域问题
    若前后端分离,需在Shiro过滤器中放行OPTIONS请求。


通过以上步骤即可完成SpringBoot与Shiro的整合,实现灵活的权限管理。完整代码可参考GitHub示例。 “`

注:本文代码基于Shiro 1.x版本,若使用Shiro 2.x需注意部分API变动。实际开发中建议结合具体业务调整Realm逻辑。

推荐阅读:
  1. SpringBoot整合Shiro安全框架
  2. springBoot整合shiro

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

spring boot shiro

上一篇:ADO.NET数据库安装创建命令是什么

下一篇:tk.Mybatis插入数据获取Id怎么实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》