Apache shiro入门

本文介绍了如何在SpringBoot项目中整合Apache Shiro库,包括自定义UserRealm进行身份验证和授权,配置DefaultWebSecurityManager,以及设置ShiroFilterFactoryBean实现URL权限控制。通过实例展示了登录验证和错误处理的过程。
摘要由CSDN通过智能技术生成

概念:简单的安全框架。支持用户赋权,身份验证,授权,加密和会话。

  1. 基础使用
    整合SpringBoot
    1.导入pom包

    org.apache.shiro
    shiro-spring
    1.8.0

    2.配置三个类
    ○ Realm:自定义类`
public class UserRealm extends AuthorizingRealm {
    //授权
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }
	//身份验证
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        UsernamePasswordToken token= (UsernamePasswordToken) authenticationToken;
        if (!token.getUsername().equals("root")){
            return null;//当返回为空时会自动UnknownAccountException异常
        }
        return new SimpleAuthenticationInfo("","123456","");//密码会和第二个参数匹配,错误IncorrectCredentialsException
    }
}

○ DefaultWebSecurityManager:默认Web安全管理器
最基础的配置:将realm作为参数传入

 @Bean
    public DefaultWebSecurityManager defaultWebSecurityManager(@Qualifier("userRealm")UserRealm userRealm) {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setRealm(userRealm);

        return securityManager;
    }ShiroFilterFactoryBean:shiro过滤器工厂
    @Bean
    public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("defaultWebSecurityManager") DefaultWebSecurityManager defaultWebSecurityManager){
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);//设置安全管理器
        /**
         * shiro的内置过滤器
         anon:无需认证就可以访问 默认
         authc:必须认证了才能访问
         user:必须拥有记住我功能才能访问
         perms:必须拥有对某个的权限才能访问
         role:拥有某个角色权限才能访问
         */
        //添加shiro的内置过滤器  设置要拦截的url
        Map<String,String> filterChainDefinitionMap=new LinkedHashMap<>();//拦截
        filterChainDefinitionMap.put("/add","authc");// /add请求必须认证才能访问
        filterChainDefinitionMap.put("/update","authc");//del必须认证才能访问
        // filterChainDefinitionMap.put("user/**","authc");//支持通配符
        shiroFilterFactoryBean.setLoginUrl("/login");//没有认证后跳到的页面
        
        return shiroFilterFactoryBean;
    }

3.controller使用

@PostMapping("/login")
    public String login(String loginName,String password){
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken usernamePasswordToken=new UsernamePasswordToken();
        usernamePasswordToken.setUsername(loginName);
        usernamePasswordToken.setPassword(password.toCharArray());
        try {
            subject.login(usernamePasswordToken);
            return "index";
        }catch (UnknownAccountException e) {
            /**
             * 异常信息
             * UnknownAccountException :用户名不存在
             * IncorrectCredentialsException:密码错误
             */
            System.out.println("用户名不存在");
            return "login";
        }catch (IncorrectCredentialsException e){
            System.out.println("密码错误");
            return "login";
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值