春天Boot2开发之弹簧引导整合Shiro两种详细方法

  

在春天引导中做权限管理,一般来说,主流的方案是Spring Security,但是,仅仅从技术角度来说,也可以使用Shiro。

  

Spring Security和Shiro的比较:

  
      <李> Spring Security是一个重量级的安全管理框架,Shiro则是一个轻量级的安全管理框架李   <李> Spring Security概念复杂,配置繁琐,Shiro概念简单,配置简单李   <李> Spring Security功能强大,Shiro功能简单李   <李>等等李   
  

虽然Shiro功能简单,但是也能满足大部分的业务场景。所以在传统的导弹项目中,一般来说,可以整合Shiro。

  

在春天引导中,由于弹簧引导官方提供了大量的非常方便的开箱即用的起动器,当然也提供了Spring Security的起动器,使得春天在引导中使用Spring Security变得更加容易,甚至只需要添加一个依赖就可以保护所有的接口,所以,如果是弹簧启动项目,一般选择Spring Security。

  

这只是一个建议的组合,单纯从技术上来说,无论怎么组合,都是没有问题的。

  

在春天引导中整合Shiro,有两种不同的方案:

  
  

第一种就是原封不动的,将导弹整合Shiro的配置用Java重写一遍。

  

第二种就是使用Shiro官方提供的一个启动器来配置,但是,这个起动并没有简化多少配置。

     

原生的整合

  

<>强创建项目

  

创建一个弹簧启动项目,只需要添加Web依赖即可:

  

春天Boot2开发之弹簧引导整合Shiro两种详细方法

  

项目创建成功后,加入Shiro相关的依赖,完整的砰的一声。xml文件中的依赖如下:

        & lt; dependencies>   & lt; dependency>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-starter-web   & lt;/dependency>   & lt; dependency>   & lt; groupId> org.apache.shiro   & lt; artifactId> shiro-web   & lt; version> 1.4.0   & lt;/dependency>   & lt; dependency>   & lt; groupId> org.apache.shiro   & lt; artifactId> shiro-spring   & lt; version> 1.4.0   & lt;/dependency>   & lt;/dependencies>      

<>强创建领域

  

接下来我们来自定义核心组件域:

        公开课MyRealm延伸AuthorizingRealm {   @Override   保护AuthorizationInfo doGetAuthorizationInfo (PrincipalCollection主体){   返回null;   }   @Override   保护AuthenticationInfo doGetAuthenticationInfo (AuthenticationToken令牌)抛出AuthenticationException {   字符串的用户名=(字符串)token.getPrincipal ();   如果(!”javaboy“.equals(用户名)){   把新UnknownAccountException(“账户不存在!”);   }   返回新SimpleAuthenticationInfo(用户名、“123”getName ());   }   }   之前      

在领域中实现简单的认证操作即可,不做授权,授权的具体写法和导弹中的Shiro一样,不赘述。这里的认证表示用户名必须是javaboy,用户密码必须是123年,满足这样的条件,就能登录成功!

  

<>强配置Shiro

  

接下来进行Shiro的配置:

        @ configuration   公开课ShiroConfig {   @ bean   MyRealm MyRealm () {   返回新MyRealm ();   }      @ bean   SecurityManager SecurityManager () {   DefaultWebSecurityManager经理=new DefaultWebSecurityManager ();   manager.setRealm (myRealm ());   返回经理;   }      @ bean   ShiroFilterFactoryBean ShiroFilterFactoryBean () {   ShiroFilterFactoryBean bean=new ShiroFilterFactoryBean ();   bean.setSecurityManager (securityManager ());   bean.setLoginUrl("/登录");   bean.setSuccessUrl(“/指数”);   bean.setUnauthorizedUrl ("/unauthorizedurl ");   String> Map<字符串;地图=new LinkedHashMap<在();   地图。put ("/doLogin”、“不久”);   地图。把(“/* *”、“authc”);   bean.setFilterChainDefinitionMap(地图);   返回bean;   }   }   之前      

在这里进行Shiro的配置主要配置三个Bean:

  
      <李>首先需要提供一个领域的实例。   <李>需要配置一个SecurityManager,在SecurityManager中配置领域。   <李>配置一个ShiroFilterFactoryBean,在ShiroFilterFactoryBean中指定路径拦截规则等。   <李>配置登录和测试接口。

    春天Boot2开发之弹簧引导整合Shiro两种详细方法