概述
本博文针对的是开发分布式系统,登录和注册的功能都放到单点登录系统中完成,供其他系统调用。同时,当用户下订单时需要用户登录,使用拦截器实现用户登录。登录成功后跳转到用户要访问的页面。推荐和上一篇《企业WEB项目单点登陆系统实现》一起食用更佳哦。
一、实现注册功能
1.需求分析
1、进行注册之前先进行数据的有效性验证。
a) 用户名不能重复
b) 确认密码和密码文本框的内容要一致。
c) 用户名、密码不能为空。
d) 手机不能为空 并且不能重复。
2、校验完成后注册。可以调用sso系统的注册接口完成注册。
2.数据校验
2.1打开注册页面
@Controller
@RequestMapping("/page")
public class PageController {
@RequestMapping("/register")
public String showRegister() {
return "register";
}
}
2.2js实现数据校验
2.3实现注册
二、实现登录功能
1.打开登录页面
回调url应该是通过一个参数传递给显示登录页面的Controller。参数名为:redirect
需要把回调的url传递给jsp页面。当登录成功后,js的逻辑中判断是否有回调的rul,如果有就跳转到此url,如果没有就跳转到商城首页。
@RequestMapping("/login")
public String showLogin(String redirect,Model model) {
model.addAttribute("redirect", redirect);
return "login";
}
2.数据校验
校验用户名密码必须输入。
3.用户登录
用户点击登录按钮把用户名和密码表单提交给登录接口,接收返回结果判断是否登录成功。
三、门户系统整合sso
在门户系统点击登录连接跳转到登录页面。登录成功后,跳转到门户系统的首页,在门户系统中需要从cookie中 把token取出来。所以必须在登录成功后把token写入cookie。并且cookie的值必须在系统之间能共享。
1.Cookie共享:
1、Domain:必须是相同的。例如有多个域名:
Sso.taotao.com
Search.taotao.com
需要设置domain为: .taotao.com
2、设置path:/
2.添加工具类
package com.taotao.common.utils;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* Cookie 工具类
*
*/
public final class CookieUtils {
/**
* 得到Cookie的值, 不编码
*
* @param request
* @param cookieName
* @return
*/
public static String getCookieValue(HttpServletRequest request, String cookieName) {
return getCookieValue(request, cookieName, false);
}
/**
* 得到Cookie的值,
*
* @param request
* @param cookieName
* @return
*/
public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) {
Cookie[] cookieList = request.getCookies();
if (cookieList == null || cookieName == null) {
return null;
}
String retValue = null;
try {
for (int i = 0; i < cookieList.length; i++) {
if (cookieList[i].getName().equals(cookieName)) {
if (isDecoder) {
retValue = URLDecoder.decode(cookieList[i].getValue(), "UTF-8");
} else {
retValue = cook