在春天引导中做权限管理,一般来说,主流的方案是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依赖即可:
项目创建成功后,加入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两种详细方法