文章目录
- 1.首页门户集成SSO Client
- 2. 聚合支付门户集成SSO Client
- 3. 测试
- 4.显示登录的用户信息
- 5.总结
1.首页门户集成SSO Client
1.Maven添加xxl-sso-core
模块:
<dependency>
<artifactId>guoranxinxian-shop-common-xxlsso-core</artifactId>
<groupId>com.guoranxinxian</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
2.配置applicatoin.yml
,完整内容如下(注意要在hosts文件里配置好域名):
3.添加配置文件
spring.redis.hostName=127.0.0.1
spring.redis.port=6379
xxl.sso.logout.path=/logout
xxl.sso.server=http://guoranxinxian.ssoserver.com:8099
xxl-sso.excluded.paths=
package com.guoranxinxian.config;
import com.xxl.sso.core.conf.Conf;
import com.xxl.sso.core.filter.XxlSsoWebFilter;
import com.xxl.sso.core.util.JedisUtil;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
public class XxlSsoConfig implements DisposableBean {
("${xxl.sso.server}")
private String xxlSsoServer;
("${xxl.sso.logout.path}")
private String xxlSsoLogoutPath;
("${xxl-sso.excluded.paths}")
private String xxlSsoExcludedPaths;
("${spring.redis.host}")
private String redisHost;
("${spring.redis.port}")
private String port;
public FilterRegistrationBean xxlSsoFilterRegistration() {
// xxl-sso, redis init
JedisUtil.init(String.format("redis://%s:%s", redisHost, port));
// xxl-sso, filter init
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setName("XxlSsoWebFilter");
registration.setOrder(1);
registration.addUrlPatterns("/*");
registration.setFilter(new XxlSsoWebFilter());
registration.addInitParameter(Conf.SSO_SERVER, xxlSsoServer);
registration.addInitParameter(Conf.SSO_LOGOUT_PATH, xxlSsoLogoutPath);
registration.addInitParameter(Conf.SSO_EXCLUDED_PATHS, xxlSsoExcludedPaths);
return registration;
}
public void destroy() throws Exception {
// xxl-sso, redis close
JedisUtil.close();
}
}
2. 聚合支付门户集成SSO Client
创建聚合支付门户模块guoranxinxian-shop-portal-pay-web
,具体的代码不再详述,可以clone
代码下来看,SSO Client
方式与上面一样:
3. 测试
1.启动Eureka
服务、SSO认证服务、
会员服务、
门户服务、
聚合支付服务`。
2.浏览器访问门户服务(注意:hosts文件已经配置了域名)http://guoranxinxian.com:8080/,浏览器自动跳转到登录界面:
3.输入登录信息,执行登录操作,登录成功,可以看到登录成功后,地址栏的url也发生改变了http://guoranxinxian.com:8080/?xxl_sso_sessionid=27_c11ef89924a4465cbf395bfefcafc63d:
同时,看下cookie信息,也把session id自动写入了浏览器的cookie:
4.访问聚合支付门户http://guoranxinxian.pay.com:8079/,可以看到直接就跳转到了聚合支付的首页了,而且浏览器的Session id
与门户服务的session id
一样:
4.显示登录的用户信息
"/")
public String index(HttpServletRequest request, HttpServletResponse response, Model model){
XxlSsoUser xxlUser = (XxlSsoUser) request.getAttribute(Conf.SSO_USER);
if (xxlUser != null && StringUtils.isNotEmpty(xxlUser.getUserid())) {
DataResults<Users> results = usersFeign.getByUserId(Long.valueOf(xxlUser.getUserid()));
if(results.getData()!=null){
String mobile = results.getData().getMobile();
// 对手机号码实现脱敏
String desensMobile = mobile.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
model.addAttribute("desensMobile", desensMobile);
}
}
model.addAttribute("goods_fresh_fruits",itemServiceFeign.findGoodsByCategory1Id(1001).getData()); // 新鲜水果 1001
model.addAttribute("goods_fresh_fish",itemServiceFeign.findGoodsByCategory1Id(1038).getData()); // 海鲜水产 1038
List<Content> content_top= (List<Content>) redisTemplate.opsForValue().get("redis_content_top");
if(content_top==null||content_top.size()==0){
content_top=contentServiceFeign.findContentBycategoryId(1).getData();
redisTemplate.opsForValue().set("redis_content_top",content_top,3, TimeUnit.MINUTES); //3分刷新缓存
}
model.addAttribute("content_top",content_top); // 轮播图
model.addAttribute("content_fresh_fruits",contentServiceFeign.findContentBycategoryId(3).getData()); // 新鲜水果主体
return "index";
}
(
<li th:if="${desensMobile==null}"><a href="login.html">您好,请登录</a></li>
<li th:if="${desensMobile!=null}"><a href="login.html" th:text="|您好,${desensMobile}|">您好,请登录</a></li>
<li>
<a href="register.html">免费注册</a>
</li>
<li>
<a href="home-order.html">我的订单</a>
</li>
<li th:if="${desensMobile!=null}"><a href="javascript:void(0);" onclick="logout();">退出</a></li>
<li>
<a href="home-person-footprint.html">我的足迹</a>
</li>
5.总结
本文主要讲解SSO Client
集成与测试。