分布式shiro权限验证

简介: 本文介绍项目中如何应用shiro做分布权限

分布式shiro权限验证

本文介绍项目中如何应用shiro做分布权限。

因为shiro是基于单服务的,session共享后,可做多服务。分布式权限,需要使用相同的域名(session的作用域)。

基本思路,通过统一的登录服务进行登录,通过iframe框架进行菜单功能跳转。

构建首页页面结构

header.html

<!DOCTYPE html>
<html lang="en">
<body>
<div th:fragment="header">
    <div>header</div>
</div>

</body>
</html>

Navigator.html 菜单可通过后台获取数据构建,路径位网关域名的绝对路径,target到iframe,此处域名以localhost为例。

<!DOCTYPE html>
<html lang="en">
<body>
<div th:fragment="navigator">
    <div>navigator</div>
    <div>
        <li><a href="http://localhost:9000/paw-authorize-shiro-api/home" target="mainFrame">a link</a></li>
        <li><a href="http://localhost:9000/paw-sky-api/index" target="bodyFrame">sky</a></li>
    </div>
</div>
</body>
</html>

最终index.html 可通过现有的一些前端框架构建 上header,左菜单栏,右工作栏的美观布局。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Shiro Session</title>

</head>
<body>
<script>
    // window.location.href='http://172.20.25.8:9000/paw-authorize-shiro-api/home';
</script>

<div  style="width: 100%;height: 100px">
    <div th:include="../templates/header"></div>
</div>

<div style="display: flex">
    <div style="width: 200px;height: 100%">
        <div th:include="../templates/navigator"></div>
    </div>

    <div style="width: 1500px;height: 1000px">
        frameLabelStart--frameLabelEnd 
    </div>
</div>
</body>
</html>

login之后跳转到index.html,之后整个页面框架不变,通过菜单调用相应的微服务,工作区mainFrame内容转换。

菜单<li><a href="http://localhost:9000/paw-sky-api/index" target="bodyFrame">sky</a></li>的服务

配置shiroConfig,登录地址指向登录服务,除登录服务外不需要配置登录页面及index页面,login也交由登录服务处理

shiro:
  loginUrl: http://localhost:8081/login
  successUrl: http://localhost:8081/index

配置类,进行session获取及注解权限处理

@Configuration
public class ShiroConfig {
  public ShiroConfig() {
  }

  @Bean
  public UserRealm userRealm() {
    UserRealm userRealm = new UserRealm();
    userRealm.setCredentialsMatcher(this.credentialsMatcher());
    return userRealm;
  }

  @Bean
  public ShiroFilterChainDefinition shiroFilterChainDefinition() {
    DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();
    chainDefinition.addPathDefinition("/captcha", "anon");
    chainDefinition.addPathDefinition("/logout", "anon");
    chainDefinition.addPathDefinition("/layuiadmin/**", "anon");
    chainDefinition.addPathDefinition("/druid/**", "anon");
    chainDefinition.addPathDefinition("/api/**", "anon");
    chainDefinition.addPathDefinition("/login", "anon");
    chainDefinition.addPathDefinition("/**", "authc");
    return chainDefinition;
  }

  @Bean
  public HashedCredentialsMatcher credentialsMatcher() {
    HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher();
    credentialsMatcher.setHashAlgorithmName("SHA-256");
    credentialsMatcher.setStoredCredentialsHexEncoded(false);
    credentialsMatcher.setHashIterations(1024);
    return credentialsMatcher;
  }

  @Bean
  public SessionsSecurityManager securityManager() {
    DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
//    securityManager.setRealm(this.userRealm());
    return securityManager;
  }

至此整个分布式页面权限完成。

gitee: https://gitee.com/tg_seahorse/paw-demos/tree/master

或分支 https://gitee.com/tg_seahorse/paw-demos/tree/paw-authorize/

paw-authorize-shiro

paw-authorize-shiro-sky

paw-demos-gateway

思考:如何将shiro相关内容提取到一个公共服务,其他页面服务只需要引入此公共服务即可实现shiro权限验证。

相关文章
|
7月前
|
存储 缓存 NoSQL
Shiro 解决分布式 Session
在分布式系统中,会话管理是一个重要的问题。Shiro框架提供了一种解决方案,通过其会话管理组件来处理分布式会话。本文演示通过RedisSessionManager解决分布式会话问题。
54 0
|
消息中间件 监控 Cloud Native
基于SpringCloud体系实现的一套支持云原生的分布式微服务架构,提供OAuth2/JWT权限认证、分布式事务、灰度、限流、链路追踪等功能,支持Docker容器化部署、镜像交付、K8S容器编排
lion是基于Spring Cloud体系实现的一套支持云原生的分布式微服务架构,为了让中小型公司解决当下技术瓶颈,快速将现有应用服务架构拆分改造为分布式微服务架构,进入 All-in-Cloud 时代,只需在本架构上进行相关业务开发即可,大大减少了分布式微服务架构的门槛,仅在本框架上做&quot;减法&quot;的目的,使架构师及开发人员不必过多的关注架构本身,只需专注于业务开发
基于SpringCloud体系实现的一套支持云原生的分布式微服务架构,提供OAuth2/JWT权限认证、分布式事务、灰度、限流、链路追踪等功能,支持Docker容器化部署、镜像交付、K8S容器编排
|
JSON 安全 Java
分布式整合之验证认证的过滤器|学习笔记
快速学习分布式整合之验证认证的过滤器
88 0
分布式整合之验证认证的过滤器|学习笔记
|
API 数据库 数据安全/隐私保护
分布式系统中,权限设计实践
采用合理的策略去管理资源的权限并不是一件简单的事,通常随着业务和系统的不断扩展,对权限体系都会带来直接的影响,所以在做结构设计时,需要相对复杂但又要避免过度复杂。
349 0
分布式系统中,权限设计实践
|
NoSQL Redis
基于shiro实现session持久化和分布式共享(3)
基于shiro实现session持久化和分布式共享(3)
164 0
基于shiro实现session持久化和分布式共享(3)
|
存储 缓存 NoSQL
基于shiro实现session持久化和分布式共享(2)
基于shiro实现session持久化和分布式共享(2)
321 0
基于shiro实现session持久化和分布式共享(2)
|
缓存
基于shiro实现session持久化和分布式共享(1)
基于shiro实现session持久化和分布式共享(1)
211 0
基于shiro实现session持久化和分布式共享(1)
|
安全 Java 数据库
分布式shiro权限验证
对于非前后端分离的后台管理系统权限验证,shiro做为一个轻量级的权限验证框架,在很多以前的项目中会被使用。
385 0
springcloud vue 微服务分布式 activiti工作流 前后分离 集成代码生成器 shiro权限
springcloud vue 微服务分布式 activiti工作流 前后分离 集成代码生成器 shiro权限

热门文章

最新文章