首页 > 其他分享 >CAS单点登录:获取请求中的Service(九)

CAS单点登录:获取请求中的Service(九)

时间:2024-06-14 17:35:35浏览次数:19  
标签:单点 String Service CAS apereo cas service org import

1.需求

在cas-server处理客户端请求的过程中,偶尔需要这个客户端的信息,这里我们就需要获取该次请求中的Service

2.引入依赖

<dependency>
    <groupId>org.apereo.cas</groupId>
    <artifactId>cas-server-core-web-api</artifactId>
    <version>${cas.version}</version>
</dependency>

3.使用WebUtils获取Service

复制代码
import com.fdzang.cas.service.framework.ApiResult;
import com.fdzang.cas.service.service.UserService;
import com.fdzang.cas.service.util.Constant;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apereo.cas.authentication.AuthenticationHandlerExecutionResult;
import org.apereo.cas.authentication.Credential;
import org.apereo.cas.authentication.PreventedException;
import org.apereo.cas.authentication.handler.support.AbstractPreAndPostProcessingAuthenticationHandler;
import org.apereo.cas.authentication.principal.PrincipalFactory;
import org.apereo.cas.services.RegisteredService;
import org.apereo.cas.services.ServicesManager;
import org.apereo.cas.web.support.WebUtils;
import org.springframework.webflow.execution.RequestContext;
import org.springframework.webflow.execution.RequestContextHolder;

import javax.security.auth.login.FailedLoginException;
import javax.servlet.http.HttpServletRequest;
import java.security.GeneralSecurityException;

@Slf4j
public class RememberMeUsernamePasswordCaptchaAuthenticationHandler extends AbstractPreAndPostProcessingAuthenticationHandler {

    private UserService userService;

    public RememberMeUsernamePasswordCaptchaAuthenticationHandler(String name, ServicesManager servicesManager, PrincipalFactory principalFactory, Integer order) {
        super(name, servicesManager, principalFactory, order);
    }

    @Override
    protected AuthenticationHandlerExecutionResult doAuthentication(Credential credential) throws GeneralSecurityException, PreventedException {
        RequestContext requestContext = RequestContextHolder.getRequestContext();
        HttpServletRequest request = WebUtils.getHttpServletRequestFromExternalWebflowContext();

        RememberMeUsernamePasswordCaptchaCredential captchaCredential = (RememberMeUsernamePasswordCaptchaCredential) credential;
        String requestCaptcha = captchaCredential.getCaptcha();
        String username = captchaCredential.getUsername();
        String password = captchaCredential.getPassword();

        // 校验验证码
        Object attribute = request.getSession().getAttribute(Constant.CAPTCHA_SESSION_KEY);
        String realCaptcha = attribute == null ? null : attribute.toString();
        if(StringUtils.isBlank(requestCaptcha) || !requestCaptcha.equalsIgnoreCase(realCaptcha)){
            throw new FailedLoginException("验证码错误");
        }

        // 获取Service信息
        RegisteredService service = WebUtils.getRegisteredService(requestContext);
        String appCode = service.getName();

        // 登录校验
        ApiResult result = userService.userLogin(username,password,appCode);
        if(!result.getCode().equals(0L)){
            throw new FailedLoginException(result.getMsg());
        }

        return createHandlerResult(credential, this.principalFactory.createPrincipal(username));
    }

    @Override
    public boolean supports(Credential credential) {
        return credential instanceof RememberMeUsernamePasswordCaptchaCredential;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }
}
复制代码

 

 

 

 

参考:https://www.cnblogs.com/tyroz/p/12106441.html

标签:单点,String,Service,CAS,apereo,cas,service,org,import
From: https://www.cnblogs.com/lvjinlin/p/18248312

相关文章

  • 车载android开发 carservice(一)
    车载android开发carservice是什么?车载Android开发中的CarService是一个专门为汽车环境设计的系统服务。CarService通常是AndroidAutomotiveOS的一部分,提供一系列API和框架,允许开发人员构建与汽车相关的应用和服务。以下是CarService的一些主要功能和作用:车辆数据访问:C......
  • 使用乐观锁和CAS解决超卖(Overselling)
    今天我要和大家分享的是如何在Java中使用乐观锁和CAS(Compare-And-Swap)技术来解决超卖的问题。最近我在项目中实现了这个功能,觉得非常有意思,所以决定分享出来。希望对大家有所帮助!背景介绍秒杀活动通常在电商平台中很常见,我觉得实现这个功能的难点在于多线程避免超卖。为了应......
  • kubernetes-外部数据库服务映射至集群内-Service与Endpoints的关系
    创建yaml文件配置数据库信息kind:ServiceapiVersion:v1metadata:name:mysql-svcnamespace:ops-systemspec:type:ClusterIP #Kubernetes将为此服务随机分配一个集群内部的IP地址ClusterIP类型的服务只能在集群内部访问,提供了一个内部访问的固定IP地址,不对......
  • Windows Server 2012 R2部署网站后IIS,只要访问网址应用程序池就自动停止,浏览器页面提
     解决方案:1.查看windows日志通过文件资源管理器查看:打开文件资源管理器,找到“我的电脑”。右键点击“管理”。在弹出的窗口中,点击“事件查看器”。在事件查看器中,点击“Windows日志”即可查看各种日志信息 2.找到错误信息......
  • monaco-editor 的 Language Services
    我们是袋鼠云数栈UED团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。本文作者:修能这是一段平平无奇的SQL语法SELECTid,sum(name)FROMstudentGROUPBYidORDERBYid;如果把这段代码放到monaco-editor(@......
  • 【Service Fabric】Service Fabric删不掉的问题
    问题描述在使用ServiceFabric服务后,想删除资源。却遇见无法删除的问题。在查看错误消息中,看见把中文的资源组名称转换为乱码了,十分怀疑是中文字符无法识别的原因。日志中的资源信息: /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/龦啊阿丏丄丅3狧埃挨......
  • 借助ServiceDesk Plus,更接近ISO 27001变更管理标准
    如果实施不当,变更支持可能会中断业务流程并导致停机。许多组织尚未建立不同的阶段来记录整个变更过程。这通常会导致IT环境,在这种环境中,实施变更的成功依赖于单个主题专家。这并不高效,并且对IT团队来说可能难以管理和压力。 让我们看看Zylker的IT部门,该部门开发了一个新......
  • 一步步了解C++类型转换:static_cast、const_cast、reinterpret_cast和dynamic_cast
    1. static_caststatic_cast 可以用于基础类型之间的转换,类层次结构中的父类和子类之间的转换,以及把 void* 转换成目标类型的指针等。静态类型转换示例:#include<iostream>classBase{};classDerived:publicBase{};intmain(){//基础数据类型int......
  • 几句话理解Kubetnetes中的Service资源的几种类型
    Kubetnetes中的Service有4种类型,ClusterIP、NodePort、LB、HandlessService.一、首先理解为什么需要Service?    1、因为Kubetnetes认为Pod这个资源并不是一个持久资源,说白了就是认为Pod不在挂就是在挂的路上。那么就需要一个资源来配套Deployment或者Statfullset来......
  • VS2022 WinFrom調用WebService
    調用方法: 引用方法在.net6.0中调用远程服务器web服务,Webservices(xxx.asmx),RESTful风格,2种解决方案。_.net_Tanjia_kiki-上海城市开发者社区(csdn.net).NET6VS2022连接WebService生成代理客户端代码_vs2022中wcf-CSDN博客......