cas服务端获取登录名
测试版本为cas4
在controller具体方法里面调用了,request就是HttpServletRequest
String username = CommonUtil.getLoginUserName(request);
本来ticketGrantingTicketCookieGenerator ,ticketRegistry用自动注入了,传给getLoginUserName方法的,
但ticketRegistry自动注入返回的bean是另一个,不是我们要用的,就直接改成在getLoginUserName方法里面获取了
public static String getLoginUserName(HttpServletRequest request) {
CookieRetrievingCookieGenerator ticketGrantingTicketCookieGenerator = (CookieRetrievingCookieGenerator) SpringContextUtil.getBean("ticketGrantingTicketCookieGenerator");
TicketRegistry ticketRegistry = (TicketRegistry) SpringContextUtil.getBean("ticketRegistry");
String userName = null;
String serviceTicketId = ticketGrantingTicketCookieGenerator.retrieveCookieValue(request);
TicketGrantingTicket serviceTicket = (TicketGrantingTicket) ticketRegistry.getTicket(serviceTicketId);
if (serviceTicket != null && serviceTicket.isExpired() == false) {
userName = serviceTicket.getAuthentication().getPrincipal().getId();
}
return userName;
}
SpringContextUtil.getBean 可以参考“spring bean 不使用注入的方式获取的两种方式"http://www.tuicool.com/articles/3YBbyy