Shiro学习

1、shiro

什么是shiro

官网:https://shiro.apache.org/

是一款主流的java安全框架,,不依赖任何容器,可以运行再JavaEE 和 javaSE项目中,它的主要作用是对访问系统的用户进行身份认证、授权、会话管理、加密等操作。

Shiro 就是用来解决安全管理的系统化框架

2、Shiro核心框架

用户、角色、权限

给角色赋予权限,给用户赋予角色

1、UsernamePasswordToken,Shiro用来封装用户登录信息,使用用户登录信息创建令牌Token

2、SecurityManager,Shiro的核心部分,负责安全认证和授权

3、Subject,Shiro的一个抽象概念,包含了用户信息

4、Realm,开发者自定义的模块,根据项目的需求, 全部写在Realm中。

5、AuthenticationInfo , 用户的角色信息集合,认证时使用。

6、AuthorzationInfo,角色的权限信息集合,授权时使用

7、DefaultWebSecurityManager,安全管理器,开发者自定义的Realm需要注入到DefaultWebSecurityManager进行管理才能生效

8、ShiroFilterFactoryBean,过滤器工厂,Shiro的基本运行机制是开发者定制规则,Shiro去执行,具体的执行操作就是由ShiroFilterFactoryBean创建的一个个Filter对象完成。

Shiro的运行机制如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hsDYUUGw-1617691354932)(E:\校园表白墙\image\shiro_01.png)]

3、Spring Boot整合Shiro

1、 集成Shiro及相关组件,pom.xml

<!-- shiro -->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.5.3</version>
        </dependency>

2、自定义Shiro过滤器

public class UserRealm extends AuthorizingRealm {

    @Autowired
    private SysUserService sysUserService;

    /**
     * AuthorizationInfo 角色的权限信息集合,授权时使用
     * @param principalCollection
     * @return
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }


    /**
     * AuthenticationInfo 用户的角色信息集合,认证时使用
     * @param authenticationToken
     * @return
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
        SysUser sysUser = sysUserService.findByUserName(token.getUsername());
        if (sysUser!=null){
            return new SimpleAuthenticationInfo(sysUser,sysUser.getPassword(),getName());
        }
        return null;
    }
}

3.配置类

/**
 * @auther jia
 * @date 2021/4/2 17:48
 * @dec shiro配置类
 */
@Configuration
public class ShiroConfig {

    @Bean
    public ShiroFilterFactoryBean shiroFilterFactoryBean( @Qualifier("securityManager") DefaultWebSecurityManager securityManager){
        ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
        factoryBean.setSecurityManager(securityManager);
        return factoryBean;
    }

    @Bean
    public DefaultWebSecurityManager securityManager(@Qualifier("sysUserRealm") SysUserRealm sysUserRealm){
        DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
        manager.setRealm(sysUserRealm);
        return manager;
    }

    @Bean
    public SysUserRealm sysUserRealm() {
        return new SysUserRealm();
    }
}

4.编写认证和授权规则:

认证过滤器:

anon:无需认证。

authc:必须认证。

authcBasic:需要通过HTTPBasic认证。

user:不一定通过认证,只要曾经被Shiro记录即可,比如:记住我。

授权过滤器

perms:必须拥有某个权限才能访问

role:必须拥有某个角色才能访问

port:请求端口必须是指定值才可以

rest:请求必须基于RESTful,POST、PULL、DELETE

ssl:必须是安全的URL请求,协议HTTPS

Shiro 整合 Thymeleaf

1、pom.xml引入依赖

 <!--shiro 整合 thymeleaf-->
        <dependency>
            <groupId>com.github.theborakompanioni</groupId>
            <artifactId>thymeleaf-extras-shiro</artifactId>
            <version>2.0.0</version>
        </dependency>

2、配置类添加 ShiroDialect

@Bean
    public ShiroDialect shiroDialect(){
        ShiroDialect shiroDialect = new ShiroDialect();
        return shiroDialect;
    }

3、页面使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值