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