springboot整合shiro入门级()

本文详细介绍了Apache Shiro权限管理框架的基本配置与使用方法,包括ShiroFilterFactoryBean的设置、DefaultWebSecurityManager的创建及UserRealm的实现,展示了如何在Spring Boot项目中整合Shiro并实现用户认证与权限控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本的入门级别shiro需要两个配置文件:
在这里插入图片描述


@Configuration
public class ShiorConfig {

    /**
     * 创建SHiorFilterFactoryBean
     */
    @Bean(name = "shiroFilter")
    public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager defaultWebSecurityManager) {
//            for (int i=0;i<90;i++)
//        System.out.println("进来了     ");
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        //设置安全管理器
        shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);

        //添加shiro内置过滤器
        /**
         * 常用过滤器,可以实现权限相关的拦截器
         *  anon: 无需认证(登录)   可以访问
         *  authc: 必须认证才可以访问
         *  user: 如果使用remmberme的功能可以直接访问
         *  perms: 该资源必须得到资源权限才可以访问
         *  role:  该资源必须得到角色权限才可以访问
         */


        /**
         * 1、下述代码中必须是LinkedHashMap 而不能是HashMap。
         *
         * 2、anon定义必须在authc之前
         *
         * 否则anon定义不生效
         */
        //设置拦截的请求

        //必须为LinkedHashMap 否则anon不生效
        Map<String,String> filterMap = new LinkedHashMap<>();
//        shiroFilterFactoryBean.setLoginUrl("login1");  //设置跳转到登录页面的请求路径
        filterMap.put("/loginHandle","anon");
        filterMap.put("/tologin","anon");
        filterMap.put("/testanon1","anon");
//        filterMap.put("/testanon2","anon");
        filterMap.put("static/**","anon");
        filterMap.put("templates/**","anon");

        filterMap.put("/testanon2","authc");
        filterMap.put("/useradd","authc");
        filterMap.put("/userupdata","authc");


        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);
        shiroFilterFactoryBean.setLoginUrl("tologin");
        return shiroFilterFactoryBean;
    }

    /**
     * 创建DefaultWebSecurityManager
     */
    @Bean(name = "securityManager")
    public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm) {
        DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
        //关联realm

        defaultWebSecurityManager.setRealm(userRealm);
        return defaultWebSecurityManager;
    }

    /**
     * 创建realm
     */
    @Bean(name = "userRealm")   //bean 的意思是把这个方法放在容器中以便于上面的方法使用
    public UserRealm getRealm() {
        return new UserRealm();
    }



}

第二个配置类`public class UserRealm extends AuthorizingRealm {
/**
* 执行授权逻辑
* @param principalCollection
* @return
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
System.out.println(“执行授权逻辑”);
return null;
}

/**
 * 执行认证逻辑
 * @param authenticationToken
 * @return
 * @throws AuthenticationException
 */
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
    System.out.println("执行认证逻辑");

    return null;
}

}
`

现在就可以写controller并且进行访问了,
以下代码是登录的后台 shiro验证是直接调用subject.login(token);
如果它抛出异常就是验证不通过 不抛异常就是验证通过

 @RequestMapping("/loginHandle")
    public String loginHandle(String name, String pass, Model model) {
        /**
         * 编写shiro认证操作
         */

        // 1.获取subject
        // 通常我们会将Subject对象理解为一个用户,同样的它也有可能是一个三方程序,它是一个抽象的概念,可以理解为任何与系统交互的“东西”都是Subject。
        Subject subject = SecurityUtils.getSubject();


        //2.封装用户数据
        UsernamePasswordToken token = new UsernamePasswordToken(name, pass);

        //3.执行登录方法
        try {

            subject.login(token);  //只要一执行认证方法就会来到 认证操作的那个类  UserRealm
            //只要这个方法没有任何异常 就代表登录成功
        } catch (UnknownAccountException e) {
                //登录失败     UnknownAccountException 代表用户名不存在
            model.addAttribute("msg","用户名不存在");
            System.out.println("登录失败");
            return "Testanon";
        }catch (IncorrectCredentialsException e1){
            //密码错误     IncorrectCredentialsException
            //登录失败
            model.addAttribute("msg","密码错误");
            return "Testanon";
        }

        return "Testanon";
    }

shiro认证流程:https://www.cnblogs.com/lldsgj/p/10778867.html

需要的依赖

<!--        springboot 与shiro整合的依赖-->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-web</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!-- shiro 与 thymeleaf 整合标签的依赖-->
        <dependency>
            <groupId>com.github.theborakompanioni</groupId>
            <artifactId>thymeleaf-extras-shiro</artifactId>
            <version>2.0.0</version>
        </dependency>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值