cas sso跨域登录实例,spa应用专用
- import static org.springframework.util.StringUtils.*;
- import java.util.Map;
- import java.util.Map.Entry;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.jasig.cas.CentralAuthenticationService;
- import org.jasig.cas.authentication.AuthenticationException;
- import org.jasig.cas.authentication.UsernamePasswordCredential;
- import org.jasig.cas.authentication.principal.Service;
- import org.jasig.cas.authentication.principal.SimplewebApplicationServiceImpl;
- import org.jasig.cas.ticket.Ticket;
- import org.jasig.cas.ticket.TicketException;
- import org.jasig.cas.ticket.TicketGrantingTicket;
- import org.jasig.cas.ticket.registry.TicketRegistry;
- import org.jasig.cas.web.support.CookieRetrievingCookieGenerator;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Qualifier;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.RestController;
- import com.google.common.collect.Maps;
- @RestController
- @RequestMapping(value = "/rest/login")
- public class RestLoginController {
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
- @Autowired
- @Qualifier("ticketGrantingTicketCookieGenerator")
- private CookieRetrievingCookieGenerator tgtCookieGenerator;
- @Autowired
- private TicketRegistry ticketRegistry;
- @Autowired
- private CentralAuthenticationService centralAuthenticationService;
- @Value("applicationProperties['cas.client.callback']")
- private String DEFAULT_SERVICE;
- @RequestMapping(method = RequestMethod.GET)
- public String login(HttpServletRequest request, HttpServletResponse response, final String username, final String password, String service){
- String tgtId = tgtCookieGenerator.retrieveCookieValue(request);
- final Map<String,Object> result = Maps.newHashMap();
- Ticket ticket = null;
- if(hasText(tgtId)) {
- ticket = ticketRegistry.getTicket(tgtId);
- }
- try {
- if(ticket != null && !ticket.isExpired() && ticket instanceof TicketGrantingTicket) {
- result.put("result", true);
- result.put("st", centralAuthenticationService.grantServiceTicket(tgtId, getService(service)));
- result.put("message", "TGT还未失效,授权service成功");
- tgtCookieGenerator.addCookie(request, response, tgtId);
- }else if(hasText(username) && hasText(password)) {
- tgtId = centralAuthenticationService.createTicketGrantingTicket(new UsernamePasswordCredential(username, password));
- result.put("result", true);
- result.put("st", centralAuthenticationService.grantServiceTicket(tgtId, getService(service)));
- result.put("message", "authentication success");
- tgtCookieGenerator.addCookie(request, response, tgtId);
- }else {
- //验证出现异常,用户名密码错误
- result.put("result", false);
- result.put("message", "验证失败");
- }
- } catch (TicketException | AuthenticationException e) {
- logger.error("tgt {} user {} 验证失败,{}", tgtId, username, e);
- result.put("result", false);
- result.put("message", "验证失败");
- }
- return constructResult(result);
- }
- private static String constructResult(Map<String, Object> result) {
- //"success({'result':'failure'})"
- StringBuilder sb = new StringBuilder("success({");
- int i = 0;
- for(Entry<String,Object> e:result.entrySet()) {
- sb.append("'" + e.getKey() + "'" + ":" + "'" +e.getValue() + "'");
- i++;
- if(i != result.size()) {
- sb.append(",");
- }
- }
- sb.append("})");
- return sb.toString();
- }
- public static void main(String[] s) {
- final Map<String,Object> result = Maps.newHashMap();
- result.put("result", true);
- result.put("message", "TGT还未失效,授权service成功");
- System.out.println(constructResult(result));
- }
- private Service getService(String service) {
- if(isEmpty(service)) {
- service = DEFAULT_SERVICE;
- }
- return new SimpleWebApplicationServiceImpl(service);
- }
- }
来源: https://www.oschina.net/code/snippet_2349285_58610