spring-boot集成shiro的步骤及代码解析

发布于:2022-12-17 ⋅ 阅读:(463) ⋅ 点赞:(0)

今天学习了shiro安全框架,Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

他有三个核心组件:Subject, SecurityManager 和 Realms.

Subject:即“当前操作用户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。

Subject代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。

SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。

Realm: Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。

从这个意义上讲,Realm实质上是一个安全相关的DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。

Shiro内置了可以连接大量安全数据源(又名目录)的Realm,如LDAP、关系数据库(JDBC)、类似INI的文本配置资源以及属性文件等。如果系统默认的Realm不能满足需求,你还可以插入代表自定义数据源的自己的Realm实现。

集成Shiro到SpringBoot

通过数据库查询到的数据通过shiro去认证,授权,大大提供了我们的数据安全性。他有着自己独有的过滤器链,将用户传回来的数据通过过滤器链的校验让数据得到较大的安全。

实现项目

1.建立springboot-plus项目

2.导入依赖

<依赖> 
    < groupId > org.apache.shiro </ groupId > 
    < artifactId > shiro-spring-boot-starter </ artifactId > 
    < version > 1.4.1 </ version > 
</ dependency >

shiro-spring-boot-starter spring-web lombok==依赖

3.改配置

@Bean
    public Realm shiroRealm(){
        return new ShiroRealm();
    }
@Bean
    public ShiroFilterChainDefinition shiroFilterChainDefinition(){
        DefaultShiroFilterChainDefinition dsfc = new DefaultShiroFilterChainDefinition();
        dsfc.addPathDefinition("/","anon");
        dsfc.addPathDefinition("/login","anon");
        dsfc.addPathDefinition("/login.html","anon");
        dsfc.addPathDefinition("/css/**","anon");
        dsfc.addPathDefinition("/js/**","anon");
        dsfc.addPathDefinition("/images/**","anon");
        dsfc.addPathDefinition("/fonts/**","anon");
        dsfc.addPathDefinition("/html/**","anon");
        //登出
        dsfc.addPathDefinition("logout","logout");
        dsfc.addPathDefinition("/**","user");

        return dsfc;

1.login/css/等等通过后缀anon放过,

2.logout把用户的认证删除,需要重新登录授权

3/** 认证 授权管理

写一个实体类继承AuthorizingRealm重写方法

校验用户信息的方法:

获取用户权限

。

 获取用户角色和权限的时候写sql语句一定要仔细再仔细!

还有一个小bug:当pom上存在starter-aop依赖时,shiro的注解会导致springmvc的注解失效。解决方案: 

 不加这个对象,很有可能访问不到请求,报302重定向的错误

sql用的xml写的,一定要再properties或者yml把xml注册进去,不然会找不到对应的方法,我当时就遗忘掉了,找了很久才发现这个细节

 当用户做登录请求或者权限请求的时候,把用户异常和密码异常自己编写个异常类,这样会给用户一个个友好的提示,不然用户也看不懂异常就很尬!!!

 总之大家写代码,一定要细心,仔细,多写,多看文档,看优秀的代码


网站公告

今日签到

点亮在社区的每一天
去签到