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; /** * @author Tanbin * @date 2018-12-12 */ @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<>(5); 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<>(5); 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; } }