内容简介:(本文的介绍是基于CAS4.0的版本)今天介绍一下单点登录实现无页面的免登,场景是在微信公众号端(第三方登录),用户点击微信授权后,自动登录企业系统。主要涉及的系统,以及交互如下所示:登录流程
(本文的介绍是基于CAS4.0的版本)
今天介绍一下单点登录实现无页面的免登,场景是在微信公众号端(第三方登录),用户点击微信授权后,自动登录企业系统。主要涉及的系统,以及交互如下所示:
登录流程
逻辑实现
上面的流程看似复杂,但是我们可以暂时不用看usercenter(用户中心)和微信服务器的交互。这里面主要说一下CAS免登录的接口是如何实现的。还需要说明一点的是,CAS只管登录相关的事情,与第三方系统的交互全部都在usercenter中进行。
HugeAutoLoginController
/**
* 第三方免登录
*
* Created by xuefeihu on 18/4/27.
*
*/
public class HugeAutoLoginController extends AbstractController {
private static final Logger LOGGER = LoggerFactory.getLogger(HugeAutoLoginController.class);
private CentralAuthenticationService centralAuthenticationService;
private CookieRetrievingCookieGenerator ticketGrantingTicketCookieGenerator;
private Md5PasswordEncoder md5PasswordEncoder;
private String casKey = “helloworld”;
/**
* 用户中心微信认证URL
*/
private String userWechatUrl;
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
try {
String username = request.getParameter(“username”);
String sign = request.getParameter(“sign”);
final String service = request.getParameter(“service”);
LOGGER.info(“username:” + username +” sign:” +sign+ ” service:” +service);
String redirectUrl = userWechatUrl + “?service=” + service;
if (StringUtils.isEmpty(username) || StringUtils.isEmpty(sign) || StringUtils.isEmpty(service)) { // 未通过第三方授权时,跳至usercenter
return new ModelAndView(“redirect:” + redirectUrl);
}
LOGGER.info(” my sign+ ” + md5PasswordEncoder.encodePassword(username, casKey));
if (!sign.equals(md5PasswordEncoder.encodePassword(username, casKey))) {// 免登接口验证失败,也跳转至usercenter
return new ModelAndView(“redirect:” + redirectUrl);
}
HugeCredential credential = new HugeCredential();
credential.setUsername(username);
credential.setAutoLogin(true);
// 生成Ticket
String tgt = centralAuthenticationService.createTicketGrantingTicket(credential);
ticketGrantingTicketCookieGenerator.addCookie(request, response, tgt);
final String serviceTicketId = centralAuthenticationService.grantServiceTicket(
tgt, new SimpleWebApplicationServiceImpl(service), credential);
LOGGER.info(“自动登录成功!”);
return new ModelAndView(“redirect:” + service + “?ticket=” + serviceTicketId);// 需要返回serviceTicket,否则跳转不到cas client的目标页面
} catch (Exception e) {
logger.error(“自动登录内部异常, e={}”, e);
}
return null;
}
public void setCasKey(String casKey) {
this.casKey = casKey;
}
public void setCentralAuthenticationService(CentralAuthenticationService centralAuthenticationService) {
this.centralAuthenticationService = centralAuthenticationService;
}
public void setMd5PasswordEncoder(Md5PasswordEncoder md5PasswordEncoder) {
this.md5PasswordEncoder = md5PasswordEncoder;
}
public void setTicketGrantingTicketCookieGenerator(CookieRetrievingCookieGenerator ticketGrantingTicketCookieGenerator) {
this.ticketGrantingTicketCookieGenerator = ticketGrantingTicketCookieGenerator;
}
public void setUserWechatUrl(String userWechatUrl) {
this.userWechatUrl = userWechatUrl;
}
}
cas-servlet.xml
<!– 自定义 Handler Mapping –>
<bean id=”handlerMappingB” class=”org.springframework.web.servlet.handler.SimpleUrlHandlerMapping”>
<property name=”mappings”>
<props>
<prop key=”/hugeAutoLogin”>hugeAutoLoginController</prop>
</props>
</property>
<property name=”interceptors”>
<list>
<ref bean=”localeChangeInterceptor” />
</list>
</property>
</bean>
…
<!– 第三方免登录Controller –>
<bean id=”hugeAutoLoginController” class=”com.moguhu.cas.controller.HugeAutoLoginController”>
<property name=”centralAuthenticationService” ref=”centralAuthenticationService” />
<property name=”ticketGrantingTicketCookieGenerator” ref=”ticketGrantingTicketCookieGenerator” />
<property name=”md5PasswordEncoder” ref=”md5PasswordEncoder” />
<property name=”userWechatUrl” value=”${usercenter.wechat.authorize}” />
</bean>
web.xml
最后在web.xml中暴露接口:
<servlet-mapping>
<servlet-name>cas</servlet-name>
<url-pattern>/hugeAutoLogin</url-pattern>
</servlet-mapping>
来源: http://moguhu.com/article/detail?articleId=83
以上所述就是小编给大家介绍的《CAS实现第三方免登录》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- ybg-spring-fast 添加码云第三方登录,微信第三方登录
- 了解一下第三方登录
- 快速实现抖音分享与第三方登录
- JustAuth 关注破 10k,第三方登录开源组件
- 第三方登录与 Sign In with Apple | 科普
- Chrome OS 88 自定义屏保界面,可指纹登录第三方网站
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大数据大创新:阿里巴巴云上数据中台之道
邓中华 / 电子工业出版社 / 2018-11 / 99
阿里巴巴云上数据中台正服务着阿里生态中的数十个业务板块、百余家公司、千万级客户,在帮助决策层看清甚至决定业态走向的同时,在上万个业务场景中应用并催生创新。 《大数据大创新:阿里巴巴云上数据中台之道》基于作者在阿里巴巴的十年大数据从业经历,精彩演绎云上数据中台之道。《大数据大创新:阿里巴巴云上数据中台之道》基于大数据探索的大趋势,讲述阿里巴巴云上数据中台顶层设计,再以实际案例详述阿里巴巴云上数......一起来看看 《大数据大创新:阿里巴巴云上数据中台之道》 这本书的介绍吧!