Commit 11487053 by 289446646@qq.com

单点登录

parent ae32db8e
......@@ -2,4 +2,6 @@ package com.hs.api.common;
public interface Constants {
String TOKEN_KEY = "Authorization";
String SYS_TOKEM_PRIFIX = "DGR_";
}
package com.hs.api.common.utils;
import com.alibaba.fastjson.JSONObject;
import com.hs.common.utils.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class SsoUtil {
static final Logger log = LoggerFactory.getLogger(SsoUtil.class);
/**
* 校验token
* @param token
* @return
*/
public static boolean checkSsoToken(String uri,String token) {
JSONObject jsonObject = null;
if (StringUtil.isNullOrEmpty(token)) {
return false;
}
String url = uri + "?token=" + token;
String result = "" ;
try{
result = SsoUtil.doGet(url);
log.info("checkSsoToken result={}",result);
jsonObject = JSONObject.parseObject(result);
}catch (Exception e){
e.printStackTrace();
}
if(jsonObject==null){
return false;
}
return true;
}
//发送http的get请求
public static String doGet(String url) {
String result = "";
BufferedReader in = null;
try {
String urlstring = url;
URL realurl = new URL(urlstring);
System.out.println("请求的服务器主机域名:" + realurl.getHost().toString());
//打开与此URL的连接
URLConnection connection = realurl.openConnection();
//设置请求连接时间和读取数据时间
connection.setConnectTimeout(3000);
connection.setReadTimeout(7000);
//建立实际的连接
connection.connect();
//读取获取的数据
in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送GET请求出现异常!" + e);
e.printStackTrace();
} finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
System.out.println("关闭请求流出现异常!" + e2);
e2.printStackTrace();
}
}
return result;
}
}
package com.hs.api.common.utils;
import com.hs.api.common.Constants;
import com.hs.api.model.SysUser;
import com.hs.api.model.TokenResult;
import com.hs.api.model.TokenProperties;
......@@ -20,7 +21,7 @@ public class TokenUtil {
*/
public static String getToken(String secret,SysUser user) {
String time = String.valueOf(System.currentTimeMillis());
String token = JWTUtil.create(secret,time,String.valueOf(user.getId()));
String token = Constants.SYS_TOKEM_PRIFIX +JWTUtil.create(secret,time,String.valueOf(user.getId()));
RedisUtil.set(token,user,TOKEN_TIME_OUT);
return token;
}
......@@ -63,7 +64,7 @@ public class TokenUtil {
*/
public static boolean checkToken(String token) {
SysUser user = (SysUser)RedisUtil.get(token);
boolean result = user != null && JWTUtil.verifier(token,user.getPassword());
boolean result = user != null && JWTUtil.verifier(token.replaceAll(Constants.SYS_TOKEM_PRIFIX,""),user.getPassword());
if(result){
RedisUtil.expire(token,TOKEN_TIME_OUT);
}
......
package com.hs.api.controller;
import com.hs.api.common.utils.SsoUtil;
import com.hs.common.utils.StringUtil;
import io.swagger.annotations.Api;
import io.swagger.models.Model;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.IOException;
import java.net.URLEncoder;
@RestController
@RequestMapping("/page")
@Api(tags = {"登录"})
public class SsoController {
@Value("${indexUri}")
private String indexUri;
@Value("${sso.checkUri}")
private String ssoCheckUri;
@Value("${sso.loginUri}")
private String ssoLoginUri;
@GetMapping("/index")
public String Login(Model model, HttpServletRequest request, HttpServletResponse response) throws IOException {
String token = request.getParameter("Token");
if (StringUtil.isNullOrEmpty(token)) {
token = request.getParameter("token");
}
//验证token是否有效,有效,则跳转至首页
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(response);
if(SsoUtil.checkSsoToken(ssoCheckUri,token)){//验证通过,跳转首页
wrapper.sendRedirect(indexUri + "?Token=" + token);
}else{//不通过,跳转sso登录页,并且传参首页地址
wrapper.sendRedirect(ssoLoginUri + "?URL=" + URLEncoder.encode( indexUri, "UTF-8" ));
}
return "";
}
}
......@@ -24,4 +24,13 @@ mybatis.configuration.call-setters-on-nulls=true
token.url=http://192.192.192.97:8001/api/tokenapi/GetUser?token=
token.interface-check=true
token.description=${token.url}'s${token.interface-check}
\ No newline at end of file
token.description=${token.url}'s${token.interface-check}
# 单点登录完成后跳转到我们的首页地址
indexUri=http://www.baidu.com/
# 验证平台单点登录token的地址和登录地址
sso.checkUri=
sso.loginUri=http://yihang.work/wdzx/index.html
spring.mvc.view.prefix=/WEB-INF/pages/
spring.mvc.view.suffix=.html
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment