掌柜大作战(4):京东统一登录服务,外网和内网
来源:互联网 发布:php怎么安装 编辑:程序博客网 时间:2024/04/28 17:24
分布式系统中,系统比较多的公司,都会统一登录和安全等公共服务,统一登录服务。
京东有2套统一登录服务:
1、JdPassport
公网环境下,使用商城账号登录,比如我的商城账号是 fans123这种。
公司统一的登录拦截器配置
<bean id="springPassportInterceptor" class="com.jd.passport.SpringMvcInterceptor">
<property name="cookieName" value="cookieName" />
<property name="authenticationKey" value="123456" />
<property name="loginUrl" value="login.jd.com"></property>
<property name="charsetName" value="utf-8"></property>
<property name="appName" value="京东商城"></property>
</bean>
2、JdSSO
内网环境下,使用公司统一的Erp账号登录,比如我的内网账号是leiwen123这种。
<bean id="springSSOInterceptor" class="com.jd.SpringSSOInterceptor">
<property name="appDomainName" value="app.jd.com"/>
<property name="appHomeUrl" value="http://app.jd.com/"/>
<property name="loginUrl" value="${login.address}"/>
<property name="ssoDomainName" value="${sso.auth.cookie.domain}"/>
<property name="excludePath" value="${sso.exclude.path}"/>
<property name="ssoService" ref="ssoService"/>
</bean>
3、组合使用
有个项目,业务方要求同时支持公网和内网(后来改为只支持公网),这个时候就需要手动配置2个Integerceptor的bean到自定义的拦截器中。
自定义的拦截器
<bean id="loginInterceptor" class="com.jd.web.interceptor.LoginInteceptor">
<property name="springPassportInterceptor" ref="springPassportInterceptor" />
<property name="springSSOInterceptor" value="springSSOInterceptor" />
</bean>
在自定义LoginInteceptor中,手动调用公网和内网2个拦截器的方法,获得结果。
是否登录了,用户ID、用户名称、用户昵称等信息。
在实际情况中,遇到1个问题。先使用外网账号登录,这个时候想使用内网登录,就会遇到问题。
比如,外网和内网同时登录了,这个时候以哪个结果优先呢?
4、SpringMVC中拦截器
<!-- 单点登录拦截器配置 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<ref bean="loginInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
5、一个实际例子
使用京东的外网统一登录服务,登录之后,拿到用户标志pin。
咱们自己的系统中,配置了用户白名单pin和其它权限配置。
这样,就可以让少数指定的用户,登录公司的面向特定用户群体的项目网站。
比如,业务方行政部门让咱开发了一个“健身房签到签退系统”,用户预约使用的是内网健身房预约系统,但是负责健身房签到签退系统的人,虽然在咱京东大厦工作,但不是
public class LoginInteceptor implements HandlerInterceptor {
//公网登录拦截器
private SpringMvcInterceptor springPassportInterceptor;
//用户服务
@Resource
private UserService userService;
private String excludePath;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {
// 判断是否是需要排除的路径
String requestURI = request.getRequestURI();
if (isExclude(requestURI)) {
return true;
}
UserContext userContext = new UserContext();
//根据公网登录拦截器服务,判断用户是否使用主站登录了
boolean passportLogin = springPassportInterceptor.parseSessionAndCheck(request, response);
//已经登录
if (passportLogin) {
//登录的用户有1个用户标识
String pin = LoginUtils.getPin(request);
//根据用户标志,去自己的系统查询这个pin绑定的用户
User user = userService.findByPin(pin);
if (user == null) {
logger.info("The user not in our user table,pin="+pin);
goToLoginPage(request, response);
return false;
}
userContext.setPin(pin);
userContext.setType(LoginTypeEnum.PASSPORT.getCode());
UserContext.setUserContext(userContext);
return true;
} else {
goToLoginPage(request, response);
}
return false;
}
以上主要是PC端使用。
移动端,京东有京东Me这个APP,里面嵌入了各种HTML5 APP。
登录依然是统一的,用手机号、ERP等方式登录。
阅读全文
0 0
- 掌柜大作战(4):京东统一登录服务,外网和内网
- 掌柜大作战(12):京东统一监控平台UMP的配置、使用和实现原理
- 掌柜大作战(13):京东统一日志平台Logbook的使用和实现原理
- 掌柜大作战(19):京东和企业信息化
- 掌柜大作战(18):京东统一监控平台UMP实现思考
- 掌柜大作战(9):京东分布式服务框架JSF的配置和使用,一步步让你成为“技术傻瓜”
- 掌柜大作战(24):京东红绿灯监控报警系统
- 掌柜大作战(8):京东消息中间件JMQ的配置和使用
- 掌柜大作战(20):京东商城系统拆分和模块化
- 掌柜大作战(2):京东Redis服务的使用
- 掌柜大作战(22):京东商城系统之间的通信和合作,技术探讨
- 掌柜大作战(21):京东线上数据库管理
- 掌柜大作战(5):使用AOP,统一记录方法执行所花的时间
- 掌柜大作战(10):人脸识别和图像识别,Java程序员的宿命
- 掌柜大作战(11):京东安全-开源组件漏洞在线检测平台
- 掌柜大作战(1):人民的美梦,群众的水乡
- 掌柜大作战(14):京东Web安全经验总结-客户端安全
- 掌柜大作战(15):营业执照图片识别,有点尴尬
- [01背包]【NOIP2014D1T3】飞扬的小鸟 题解
- reverseList
- WebSocket与消息推送
- java学习路线
- codeforces 766A Mahmoud and Longest Uncommon Subsequence
- 掌柜大作战(4):京东统一登录服务,外网和内网
- day13java反射机制
- Java基础-修饰符
- 停课总结(四)
- [分治][并查集]Codeforces 603E. Pastoral Oddities
- [bzoj5017/Snoi2017]炸弹
- leetcode题解-31. Next Permutation
- QTcpServer类
- RocketMQ——顺序消息