1.user模块增加金宏认证,还需要测试

main
yitonglei 3 years ago
parent d58c2d0a19
commit d08abc8c7e
  1. 7
      lab-common/pom.xml
  2. 4
      lab-gateway/pom.xml
  3. 35
      lab-service/lab-user/src/main/java/org/springblade/system/jinhong/BaseUtils.java
  4. 156
      lab-service/lab-user/src/main/java/org/springblade/system/jinhong/IdentityInterceptor.java
  5. 90
      lab-service/lab-user/src/main/java/org/springblade/system/jinhong/Validator.java
  6. 1
      lab-service/lab-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java
  7. 5
      lab-service/lab-user/src/main/resources/config.properties

@ -38,6 +38,13 @@
<artifactId>ant</artifactId>
<version>1.9.1</version>
</dependency>
<dependency>
<groupId>com.yawei.oav2</groupId>
<artifactId>yawei-pso</artifactId>
<version>2.0.2</version>
<scope>system</scope>
<systemPath>${pom.basedir}/src/main/resources/lib/yawei-pso-2.0.2.jar</systemPath>
</dependency>
</dependencies>
<build>

@ -44,6 +44,10 @@
<groupId>org.springblade</groupId>
<artifactId>blade-core-launch</artifactId>
</exclusion>
<exclusion>
<groupId>com.yawei.oav2</groupId>
<artifactId>yawei-pso</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>

@ -0,0 +1,35 @@
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 "";
}
}
}

@ -0,0 +1,156 @@
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================");
}
}

@ -0,0 +1,90 @@
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;
}
}

@ -296,7 +296,6 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
// queryWrapper.like(User::getRoleId, "1432876315142520834");
// }
IPage<Object> page = Condition.getPage(query);
IPage<User> pages = this.page(Condition.getPage(query), queryWrapper);
return UserWrapper.build().pageVO(pages);
}

@ -0,0 +1,5 @@
#系统配置信息
#认证配置
domain=yw.com.cn
ssoKey=SSOToken
keeperUrl=http://localhost:8088/Keeper.aspx
Loading…
Cancel
Save