码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • keycloak~在认证的action中自定义重定向地址


    场景与实现逻辑

    • 我的登录接口,在输入账号密码成功后进行中间页
    • 中间页可以通过添加Authenticator的实现类来写逻辑
    • authenticate方法是渲染页面的,action方法是提交表单后的逻辑
    • context.success()方法表示认证成功,将进行重写向操作
    • 可以通过Response.status(302).header(HttpHeaders.LOCATION, modifyPasswordPage).build()实现自定义的重定向地址
    • 在kc配置中,复制一个brower认证流,为账号密码模块添加一个行为(execution)

    核心代码

      @Override
      public void authenticate(AuthenticationFlowContext context) {
    
        if (context.getAuthenticationSession().getUserSessionNotes().containsKey("password")) {
          String password = context.getAuthenticationSession().getUserSessionNotes().get("password").toLowerCase();
          if (password.matches(regex)) {
            context.success();
            return;
          }
        }
    
        Response challenge = context.form().createForm("login-simple-password-alert.ftl");
        context.challenge(challenge);
      }
    
      @Override
      public void action(AuthenticationFlowContext context) {
        MultivaluedMap formData = context.getHttpRequest().getDecodedFormParameters();
        if (formData.containsKey("submitType") && formData.get("submitType").get(0).equals("1")) {
          AuthenticatorConfigModel authenticatorConfigModel =
              KeycloakUtil.getAuthenticatorConfigByAlias(context.getSession(), V6_CONFIG);
          String mainSite = "https://www.abc.com";
          if (authenticatorConfigModel.getConfig().containsKey(MAIN_SITE) &&
              StringUtils.isNotBlank(authenticatorConfigModel.getConfig().get(MAIN_SITE))) {
            mainSite = authenticatorConfigModel.getConfig().get(MAIN_SITE);
          }
          if (mainSite.endsWith("/")) {
            mainSite = mainSite.substring(0, mainSite.length() - 1);
          }
          context.success();
          String modifyPasswordPage = mainSite + "/usercenter/info";
          Response response = Response.status(302)
              .header(HttpHeaders.LOCATION, modifyPasswordPage).build();
          context.challenge(response);
          return;
        }
        context.success();
      }
    

    登录中间页面login-simple-password-alert.ftl

    • src\main\resources\theme\custom\login\
    • 这个目录下有皮肤文件login.ftl和中间页文件login-simple-password-alert.ftl
    • kc后台为指定客户端或者领域设置登录皮肤为custom
    • login-simple-password-alert.ftl如下:
    默认登录后的跳换 登录后去个人中心

    自定义登录逻辑的KC配置如下

  • 相关阅读:
    入行测试已经4年了 ,进阿里后迷茫了3个月,做完这个项目我决定离职....
    基于BP神经网络的图像跟踪与细胞追踪识别
    c语言遇到的常见问题及解决方案
    Vue+element 商品列表、新增、编辑、删除业务实现
    httprunnet自动化测试实战
    批量将excel表格数据导入word中-邮件合并法
    java毕业设计超市购物数据管理系统mybatis+源码+调试部署+系统+数据库+lw
    功能性氯乙酰化聚苯乙烯微球载体PS-acyl-Cl/二氧化锆微球表面键合磺化交联聚苯乙烯相关研究
    http和https分别是什么?
    深度学习Course2第二周Optimization Algorithms习题整理
  • 原文地址:https://www.cnblogs.com/lori/p/18113068
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号