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

news/2024/9/29 13:18:27

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);}@Overrideprotected 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));}@Overridepublic boolean supports(Credential credential) {return credential instanceof RememberMeUsernamePasswordCaptchaCredential;}public void setUserService(UserService userService) {this.userService = userService;}
}
复制代码

 

 

 

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/45422.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Java最全知识脑图 涵盖 juc mysql git mybatis 等 面试必备

Java初中级知识脑图 面试超实用 1.Git 下载链接 导图下载地址 : https://mm.edrawsoft.cn/mobile-share/index.html?uuid=31d00742157057-src&share_type=12.JUC 下载链接 https://mm.edrawsoft.cn/mobile-share/index.html?uuid=6c0be457444921-src&share_type=13…

CAS单点登录:配置记住我,添加验证码(五)

1.配置RememberMe 1.1.修改application.properties## # 记住我 # cas.ticket.tgt.rememberMe.enabled=true cas.ticket.tgt.rememberMe.timeToKillInSeconds=36001.2.修改登录界面<div class="form-group" th:if="${rememberMeAuthenticationEnabled}"&…

解决Jenkins用shell脚本部署后,Jenkins自动杀掉启衍生出来的守护进程

参考 https://www.cnblogs.com/chenchen-tester/p/9334482.html 使用jenkins部署后jenkins会自动kill部署脚本导致部署不成功 可以使用以下方法解决 在部署shell脚本之前添加参数 BUILD_ID=DONTKILLME

CAS单点登录:动态添加service(四)

1.简介 在CAS系统中,主要分为三部分,User、Web应用、SSO认证中心。 User就是我们普通用户,Web应用就是需要接入SSO认证中心的应用也就是这里的Service,而SSO认证中心就是CAS服务端。 简单来说就是CAS分为服务端和客户端,而Service就是指具体的多个客户端(CAS Clients)。…

linux命令lshw

lshw是一个提取机器硬件配置详细信息的小工具。 它可以在DMI卡上报告准确的内存配置、固件版本、主板配置、CPU版本和速度、缓存配置、总线速度等,可支持x86或IA-64系统,并且在一些PowerPC机器上(已知PowerMac G4可以工作)。用法 ​ lshw [指定格式] [指定参数] 格式选项 -h…

CAJ文件怎么打开?可以转成word吗?

随着科技的发展,文档格式的多样性成为我们日常工作中不可避免的一部分。CAJ文件,作为一种特殊的文档格式,常常困扰着许多用户。那么,究竟什么是CAJ文件格式?我们又该如何将其转换为常用的Word文档呢?接下来,让我们一起深入了解。 打开CAJ文档非常简单,只需要下载官方的…

自定义F类中U类指针管理(UEC++CollectGarbage)

UObject 系统和垃圾回收 UObject:UObject及子类由UE的垃圾回收(GC)系统管理。UE使用引用计数来跟踪对象的生命周期。当一个UObject实例不再被任何强引用持有时,GC会将其标记为可回收。 标记-清除(Mark-and-Sweep):UE的GC系统采用标记-清除算法,这类似于C#和Java的GC机制…

Libgdx游戏开发(3)——通过柏林噪音算法地图随机地形

原文: Libgdx游戏开发(3)——通过柏林噪音算法地图随机地形-Stars-One的杂货小窝 在B站刷到了随机地图生成的视频,随手学习下并做下记录注: 本篇使用javafx应用作演示,算是了解这个算法的使用,后续会再出篇libgdx生成地图的示例说明 抛开算法实现,首先认知柏林噪音算法 一般我们…