CAS实现第三方免登录

栏目: Java · 发布时间: 6年前

内容简介:(本文的介绍是基于CAS4.0的版本)今天介绍一下单点登录实现无页面的免登,场景是在微信公众号端(第三方登录),用户点击微信授权后,自动登录企业系统。主要涉及的系统,以及交互如下所示:登录流程

(本文的介绍是基于CAS4.0的版本)

今天介绍一下单点登录实现无页面的免登,场景是在微信公众号端(第三方登录),用户点击微信授权后,自动登录企业系统。主要涉及的系统,以及交互如下所示:

登录流程

CAS实现第三方免登录

逻辑实现

上面的流程看似复杂,但是我们可以暂时不用看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实现第三方免登录》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序员代码面试指南:IT名企算法与数据结构题目最优解

程序员代码面试指南:IT名企算法与数据结构题目最优解

左程云 / 电子工业出版社 / 2015-9 / 79.00元

这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮助广大程序员的面试准备做到万无一失。“刷”完本书后,你就是“题王”!__eol__本书采用题目+解答的方式组织内容,并把面试题类型相近或者解法相近的题目尽量放在一起,读者在学习本书时很容易看出面试题解法之间的联......一起来看看 《程序员代码面试指南:IT名企算法与数据结构题目最优解》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

MD5 加密
MD5 加密

MD5 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换