SpringBoot项目,运行时忽略Shiro等功能权限和数据权限

 

几点感受: shiro等安全框架,非常复杂,组件太多,继承太复杂。老外写的框架都是这个鸟样。

只看本文的结论,很简单,但在找到答案之前,很复杂。

走了点弯路,shiro初始化比较早,据说在其它bean之前。不细说,大概记下。

 

配置属性:

# when only true,ignore shiro permission control
devMode: true

 

// 通用注释掉 注解的方式可以忽略权限,但非常麻烦

//  @Import(ShiroConfig.class)

public class Application {

}

 

初始化属性

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

@Component

@Slf4j

public class ConfigCommandLineRunner implements CommandLineRunner{

@Autowired

private Environment env;

 

public void initProperties() {

String devMode = env.getProperty("devMode");

if (StringUtils.equals(devMode, "true")) {

DevConfig.devMode = true;

log.info("ConfigCommandLineRunner run devMode is true");

}

}

 

@Override

public void run(String... arg0) throws Exception {

initProperties();

 

}

 

}

 

扩展Shiro的权限控制组件

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

/**

* 开发阶段,放过方法注解的拦截。提高开发效率.精益求精,快中求快。

*

*/

public class MyAuthorizationAttributeSourceAdvisor extends AuthorizationAttributeSourceAdvisor{

 

private static final long serialVersionUID = 1L;

 

@Override

public boolean matches(Method method, Class targetClass) {

if(DevConfig.devMode){

return false;

}

return super.matches(method, targetClass);

}

 

}

 

@Slf4j

public class MyFormAuthenticationFilter extends FormAuthenticationFilter {

 

@Override

protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {

log.info("MyFormAuthenticationFilter.isAccessAllowed()");

if(DevConfig.devMode){

return true;

}

return super.isAccessAllowed(request, response, mappedValue);

}

 

}

 

Shiro配置

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

@Bean

public AuthorizationAttributeSourceAdvisor getAuthorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {

AuthorizationAttributeSourceAdvisor aasa = new MyAuthorizationAttributeSourceAdvisor();

aasa.setSecurityManager(getDefaultWebSecurityManager());

return aasa;

}

 

 

 

@Bean(name = "shiroFilter")

public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager securityManager, CasFilter casFilter) {

ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();

shiroFilterFactoryBean.setSecurityManager(securityManager);

 

Map<String, Filter> filters = new HashMap<>();

 

//自定义filter.

MyFormAuthenticationFilter formAuthenticationFilter = new MyFormAuthenticationFilter();

//重新定义formAuthenticationFilter

filters.put("authc", formAuthenticationFilter);

//交给spring shiroFilter管理

shiroFilterFactoryBean.setFilters(filters);

loadShiroFilterChain(shiroFilterFactoryBean);

return shiroFilterFactoryBean;

}

 

 

忽略数据权限,大概例子

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

/**

* 区域权限

*/

protected List<Integer> getAllAllowRegionId() {

Optional<Object> casJson = getSessionInfo("allowRegionId");

String allowRegionId = (String) casJson.orElse("");

if(DevConfig.devMode){

allowRegionId="0,4,5,6,7,9,12,14";

}

List<Integer> allowRegionIdList = JavaKit.splitAsIntList(allowRegionId, ",");

return allowRegionIdList;

}

 

 

 

/**

* 填充测试标记公司.没有测试权限时,设置isTest为0

*/

protected void fillIsTest(PermissionVo permissionVo) {

if(DevConfig.devMode){

log.info("DevMode true,ignore fillIsTest");

return;

}

boolean hasTestPermission=hasTestPermission();

if(!hasTestPermission){

permissionVo.setIsTest(0);

}

}

发布了1320 篇原创文章 · 获赞 2523 · 访问量 341万+
展开阅读全文

SpringBoot2.0企业中台~分布式系统实战成神之路

12-11

本套餐将包含3大重量级课程,旨在一步一步教授各位小伙伴分布式、微服务SpringBoot2.0实战的相关技术栈,并最终将其用于“企业权限管理平台”和“企业级中台系统”的实战当中,真正践行“从实践中来、从实践中去”的理念,掌握并巩固提升各位小伙伴的核心竞争力!其中包含的3大课程以及学习顺序如下所示: 1、分布式服务调度中间件dubbo实战课程:掌握在分布式系统环境之下如何发布服务-接口,如何调用其他项目的服务-接口以及掌握dubbo在当前微服务项目、分布式系统服务调度的使用;如何基于dubbo rpc协议、http协议实战实际的业务场景,进而巩固dubbo的相关知识要点! 2、SpringBoot2.0企业权限管理平台 : 主要在于将所学的微服务技术栈应用于企业级项目的开发中,了解企业应用业务模块的开发流程与开发模式(从前端到后端再到数据库),最终一步一步地成为企业应用开发中需要的人才! 3、SpringBoot2.0企业中台实战之权限统一管理与应用统一授权 (dubbo分布式系统实战):掌握中台的思想及其如何在项目中落地,并基于微服务SpringBoot2.0和分布式系统架构相关技术栈加以实现;分布式系统架构的设计、业务需求分析、代码实战以及分布式服务通信相关的技术栈;分布式服务调度Dubbo+ZooKeeper的基本开发技术栈、Redis、分布式Session共享、Guava_Retrying重试机制、组件JWT、OkHttp3等核心技术栈;分布式系统中服务与服务之间是如何通信、拦截过滤url以及认证Token的;除此之外,分布式系统架构代码性能优化也可以从本课程中学到!

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 猿与汪的秘密 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览