parent
73a8a1f8b0
commit
9f565cc464
7 changed files with 41 additions and 292 deletions
@ -1,35 +0,0 @@ |
|||||||
package org.springblade.system.jinhong; |
|
||||||
|
|
||||||
import java.io.BufferedReader; |
|
||||||
import java.io.IOException; |
|
||||||
import java.io.InputStream; |
|
||||||
import java.io.InputStreamReader; |
|
||||||
import java.util.Properties; |
|
||||||
|
|
||||||
public class BaseUtils |
|
||||||
{ |
|
||||||
/** |
|
||||||
* 获取配置文件中的配置信息 |
|
||||||
* |
|
||||||
* @param key配置文件key值 |
|
||||||
* @return |
|
||||||
* @throws IOException |
|
||||||
*/ |
|
||||||
public static String getConfigValue(String key) |
|
||||||
{ |
|
||||||
try |
|
||||||
{ |
|
||||||
Properties props = new Properties(); |
|
||||||
InputStream in = BaseUtils.class.getClassLoader() |
|
||||||
.getResourceAsStream("config.properties"); |
|
||||||
BufferedReader bf = new BufferedReader(new InputStreamReader(in, |
|
||||||
"UTF-8")); |
|
||||||
props.load(bf); |
|
||||||
return props.getProperty(key); |
|
||||||
} |
|
||||||
catch (IOException ex) |
|
||||||
{ |
|
||||||
return ""; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,156 +0,0 @@ |
|||||||
package org.springblade.system.jinhong; |
|
||||||
|
|
||||||
import java.net.URLEncoder; |
|
||||||
import java.util.Iterator; |
|
||||||
import java.util.Map.Entry; |
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest; |
|
||||||
import javax.servlet.http.HttpServletResponse; |
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j; |
|
||||||
import org.springframework.stereotype.Component; |
|
||||||
import org.springframework.web.servlet.ModelAndView; |
|
||||||
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; |
|
||||||
|
|
||||||
import com.yawei.pso.PSORequest; |
|
||||||
import com.yawei.pso.SSOResponse; |
|
||||||
import com.yawei.pso.TicketManager; |
|
||||||
|
|
||||||
/** |
|
||||||
* 自定义拦截器,拦截符合条件url的请求 身份验证拦截 |
|
||||||
* (是否有登录用户信息) |
|
||||||
*/ |
|
||||||
@Slf4j |
|
||||||
@Component |
|
||||||
public class IdentityInterceptor extends HandlerInterceptorAdapter |
|
||||||
{ |
|
||||||
|
|
||||||
// 读取ssoToken参数
|
|
||||||
private static final String strToken = BaseUtils.getConfigValue("ssoKey"); |
|
||||||
|
|
||||||
public final static String SEESION_USER = "seesion_user"; |
|
||||||
|
|
||||||
/** |
|
||||||
* 在业务处理器处理请求之前被调用 如果返回false 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链 |
|
||||||
* 如果返回true 执行下一个拦截器,直到所有的拦截器都执行完毕 再执行被拦截的Controller 然后进入拦截器链, |
|
||||||
* 从最后一个拦截器往回执行所有的postHandle() 接着再从最后一个拦截器往回执行所有的afterCompletion() |
|
||||||
*/ |
|
||||||
@Override |
|
||||||
public boolean preHandle(HttpServletRequest request, |
|
||||||
HttpServletResponse response, Object handler) throws Exception |
|
||||||
{ |
|
||||||
|
|
||||||
log.debug("==============执行顺序: 1、preHandle================"); |
|
||||||
// 获取当前请求的url
|
|
||||||
String requestUri = request.getRequestURI(); |
|
||||||
|
|
||||||
Validator validator = Validator.getInstance(); |
|
||||||
// 注入当前session
|
|
||||||
// validator.init(request);
|
|
||||||
|
|
||||||
String strResponse = request.getParameter(strToken); |
|
||||||
|
|
||||||
//真实环境需要放开如下注释
|
|
||||||
/** |
|
||||||
* |
|
||||||
|
|
||||||
if (strResponse != null) |
|
||||||
{ |
|
||||||
// 如果服务器端通过认证后,会返回后执行改操作,然后写入cookie
|
|
||||||
SSOResponse ssoResp = new SSOResponse(strResponse); |
|
||||||
TicketManager tm = ssoResp.CreatePSOTicket(); |
|
||||||
if (tm == null) |
|
||||||
{ |
|
||||||
PSORequest psoRequest = new PSORequest(request); |
|
||||||
String requeststr = psoRequest.CreateHash(); |
|
||||||
|
|
||||||
String keeperUrl = BaseUtils.getConfigValue("keeperUrl"); |
|
||||||
keeperUrl = keeperUrl + "?" + strToken + "=" |
|
||||||
+ URLEncoder.encode(requeststr, "UTF-8"); |
|
||||||
response.sendRedirect(keeperUrl); |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
String domainName = BaseUtils.getConfigValue("domain"); |
|
||||||
tm.SaveTicket(response, domainName); |
|
||||||
|
|
||||||
Iterator<Entry<String, String[]>> iterator = request |
|
||||||
.getParameterMap().entrySet().iterator(); |
|
||||||
StringBuffer param = new StringBuffer(); |
|
||||||
int i = 0; |
|
||||||
while (iterator.hasNext()) |
|
||||||
{ |
|
||||||
Entry<String, String[]> entry = (Entry<String, String[]>) iterator |
|
||||||
.next(); |
|
||||||
if (entry.getKey().equals(strToken)) |
|
||||||
continue; |
|
||||||
else |
|
||||||
{ |
|
||||||
i++; |
|
||||||
if (i == 1) |
|
||||||
param.append("?").append(entry.getKey()) |
|
||||||
.append("="); |
|
||||||
else |
|
||||||
param.append("&").append(entry.getKey()) |
|
||||||
.append("="); |
|
||||||
|
|
||||||
if (entry.getValue() instanceof String[]) |
|
||||||
{ |
|
||||||
param.append(((String[]) entry.getValue())[0]); |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
param.append(entry.getValue()); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
response.sendRedirect(requestUri + param.toString()); |
|
||||||
return false; |
|
||||||
} |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
TicketManager tm = new TicketManager(); |
|
||||||
if (!tm.LoadTicket(request)) |
|
||||||
{ |
|
||||||
PSORequest psoRequest = new PSORequest(request); |
|
||||||
String requeststr = psoRequest.CreateHash(); |
|
||||||
|
|
||||||
String keeperUrl = BaseUtils.getConfigValue("keeperUrl"); |
|
||||||
keeperUrl = keeperUrl + "?" + strToken + "=" |
|
||||||
+ URLEncoder.encode(requeststr, "UTF-8"); |
|
||||||
response.sendRedirect(keeperUrl); |
|
||||||
return false; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
validator.SetUserTicket(request); |
|
||||||
return true; |
|
||||||
*/ |
|
||||||
return false; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 在业务处理器处理请求执行完成后,生成视图之前执行的动作 可在modelAndView中加入数据,比如当前时间 |
|
||||||
*/ |
|
||||||
@Override |
|
||||||
public void postHandle(HttpServletRequest request, |
|
||||||
HttpServletResponse response, Object handler, |
|
||||||
ModelAndView modelAndView) throws Exception |
|
||||||
{ |
|
||||||
log.debug("==============执行顺序: 2、postHandle================"); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等 |
|
||||||
* |
|
||||||
* 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion() |
|
||||||
*/ |
|
||||||
@Override |
|
||||||
public void afterCompletion(HttpServletRequest request, |
|
||||||
HttpServletResponse response, Object handler, Exception ex) |
|
||||||
throws Exception |
|
||||||
{ |
|
||||||
log.debug("==============执行顺序: 3、afterCompletion================"); |
|
||||||
} |
|
||||||
} |
|
||||||
@ -1,90 +0,0 @@ |
|||||||
package org.springblade.system.jinhong; |
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest; |
|
||||||
import javax.servlet.http.HttpSession; |
|
||||||
|
|
||||||
import com.yawei.pso.TicketManager; |
|
||||||
|
|
||||||
/** |
|
||||||
* 验证器 |
|
||||||
*/ |
|
||||||
public class Validator |
|
||||||
{ |
|
||||||
private static ThreadLocal<Validator> validatorHolder = new ThreadLocal<Validator>() |
|
||||||
{ |
|
||||||
|
|
||||||
protected Validator initialValue() |
|
||||||
{ |
|
||||||
return new Validator(); |
|
||||||
} |
|
||||||
|
|
||||||
}; |
|
||||||
|
|
||||||
// 当前请求的session
|
|
||||||
private HttpSession session = null; |
|
||||||
|
|
||||||
// 当前的请求
|
|
||||||
private HttpServletRequest request = null; |
|
||||||
|
|
||||||
private Validator() |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
public static Validator getInstance() |
|
||||||
{ |
|
||||||
return validatorHolder.get(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 执行初始化 |
|
||||||
* @param httpRequest |
|
||||||
*/ |
|
||||||
public void init(HttpServletRequest httpRequest) |
|
||||||
{ |
|
||||||
this.request = httpRequest; |
|
||||||
this.session = request.getSession(); |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 将凭证身份加入到session |
|
||||||
* @param httpRequest |
|
||||||
*/ |
|
||||||
public void SetUserTicket(HttpServletRequest httpRequest) |
|
||||||
{ |
|
||||||
try |
|
||||||
{ |
|
||||||
if (httpRequest.getSession() |
|
||||||
.getAttribute(IdentityInterceptor.SEESION_USER) == null) |
|
||||||
{ |
|
||||||
TicketManager ticket = new TicketManager(); |
|
||||||
if (ticket.LoadTicket(httpRequest)) |
|
||||||
{ |
|
||||||
// 登录用户姓名
|
|
||||||
String userName = ticket.getUserName(); |
|
||||||
// 登录用户账号
|
|
||||||
String userAccount = ticket.getUserID(); |
|
||||||
// 登录用户标识
|
|
||||||
String userGuid = ticket.getADGUID(); |
|
||||||
System.out.println("===userName===" + userName); |
|
||||||
System.out.println("===userAccount===" + userAccount); |
|
||||||
System.out.println("===userGuid===" + userGuid); |
|
||||||
} |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
} |
|
||||||
} |
|
||||||
catch (Exception ex) |
|
||||||
{ |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* 清除session |
|
||||||
*/ |
|
||||||
public void cancel() |
|
||||||
{ |
|
||||||
this.session = null; |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
Loading…
Reference in new issue