package org.apereo.cas.web.flow; import java.time.ZonedDateTime; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apereo.cas.CentralAuthenticationService; import org.apereo.cas.authentication.Authentication; import org.apereo.cas.authentication.AuthenticationBuilder; import org.apereo.cas.authentication.AuthenticationResult; import org.apereo.cas.authentication.AuthenticationResultBuilder; import org.apereo.cas.authentication.BasicCredentialMetaData; import org.apereo.cas.authentication.CredentialMetaData; import org.apereo.cas.authentication.DefaultAuthenticationBuilder; import org.apereo.cas.authentication.DefaultAuthenticationResult; import org.apereo.cas.authentication.DefaultAuthenticationResultBuilder; import org.apereo.cas.authentication.DefaultHandlerResult; import org.apereo.cas.authentication.HandlerResult; import org.apereo.cas.authentication.UsernamePasswordCredential; import org.apereo.cas.authentication.principal.DefaultPrincipalFactory; import org.apereo.cas.authentication.principal.Principal; import org.apereo.cas.services.ServicesManager; import org.apereo.cas.support.rest.DefaultCredentialFactory; import org.apereo.cas.ticket.TicketGrantingTicket; import org.apereo.cas.web.support.WebUtils; import org.apereo.inspektr.common.web.ClientInfoHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.webflow.action.AbstractAction; import org.springframework.webflow.execution.Event; import org.springframework.webflow.execution.RequestContext; import eu.bitwalker.useragentutils.Browser; import eu.bitwalker.useragentutils.UserAgent; import eu.bitwalker.useragentutils.Version; @Component("loginAction2") public class LoginAction2 extends AbstractAction { protected Logger logger = LoggerFactory.getLogger(getClass()); /** * The Central authentication service. */ @Autowired protected CentralAuthenticationService centralAuthenticationService; protected ServicesManager servicesManager; @Override protected Event doExecute(RequestContext requestContext) throws Exception { final TicketGrantingTicket tgt; final Map successes=new HashMap<>(); String username= requestContext.getFlowScope().get("username").toString(); UsernamePasswordCredential credential=new UsernamePasswordCredential(username,""); CredentialMetaData cmd= new BasicCredentialMetaData(credential); DefaultPrincipalFactory p=new DefaultPrincipalFactory(); Principal principal=p.createPrincipal(username); HandlerResult hs= new DefaultHandlerResult("handler",cmd,principal,null); successes.put("success", hs); final Map authenticationAttributes = new HashMap<>(); AuthenticationBuilder d=DefaultAuthenticationBuilder.newInstance(); HttpServletRequest request = WebUtils.getHttpServletRequest(); if(null != request) { String uaStr = request.getHeader("User-Agent"); UserAgent ua = UserAgent.parseUserAgentString(uaStr); if(null != ua) { Browser browser=ua.getBrowser(); Version broVersion=browser.getVersion(uaStr); final String browserInfo=browser.getName()+"/"+broVersion.getVersion(); final String clientIp = ClientInfoHolder.getClientInfo().getClientIpAddress(); String serviceUrl = request.getParameter("service"); logger.debug("##### client IP address is [{}], browser is [{}], serviceUrl is [{}]", clientIp, browserInfo, serviceUrl); authenticationAttributes.put("clientIp", clientIp); authenticationAttributes.put("browserInfo", browserInfo); authenticationAttributes.put("serviceUrl", serviceUrl); } } //接收传来的用户名 d.setPrincipal(principal); d.addCredential(cmd); d.setAttributes(authenticationAttributes); d.setAuthenticationDate(ZonedDateTime.now()); d.setSuccesses(successes); Authentication authentication= d.build(); final DefaultAuthenticationResult res = new DefaultAuthenticationResult(authentication, null); tgt = this.centralAuthenticationService.createTicketGrantingTicket(res);; WebUtils.putTicketGrantingTicketInScopes(requestContext, tgt); WebUtils.putAuthenticationResult(res, requestContext); WebUtils.putAuthentication(tgt.getAuthentication(), requestContext); // return new Event(this,"directsubmit"); return new Event(this,"success"); } public void setServicesManager(ServicesManager servicesManager) { this.servicesManager = servicesManager; } }