实现类
package cn.com.yusys.yusp.mcp.interceptor;
import cn.com.yusys.yusp.commons.session.context.UserContext;
import cn.com.yusys.yusp.commons.session.user.User;
import cn.com.yusys.yusp.commons.session.user.impl.UserInformation;
import cn.com.yusys.yusp.commons.session.util.SessionUtils;
import cn.com.yusys.yusp.commons.util.StringUtils;
import cn.com.yusys.yusp.oca.dao.AdminSmRoleDao;
import cn.com.yusys.yusp.oca.dao.AdminSmUserDao;
import cn.com.yusys.yusp.oca.domain.vo.AdminSmRoleVo;
import cn.com.yusys.yusp.oca.domain.vo.AdminSmUserDetailVo;
import cn.com.yusys.yusp.oca.interceptor.RequestWrapper;
import cn.com.yusys.yusp.oca.service.cache.CustomCacheService;
import cn.com.yusys.yusp.oca.service.impl.SessionServiceImpl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 拦截mcp请求,初始化用户信息
*/
@Component
public class McpInterceptor implements HandlerInterceptor {
@Autowired
private AdminSmUserDao adminSmUserDao;
@Autowired
private CustomCacheService customCacheService;
@Autowired
private SessionServiceImpl sessionServiceImpl;
private final static Logger logger = LoggerFactory.getLogger(McpInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object Handler) throws IOException {
RequestWrapper requestWrapper = new RequestWrapper(request);
String bodyStr = requestWrapper.getBody();
JSONObject body = JSON.parseObject(bodyStr);
String userId ="";
String orgId="";
String roleId="";
if("POST".equals(requestWrapper.getMethod())){
//如果getParameter获取不到就从请求body里面获取
userId = requestWrapper.getParameter("userId") == null ? body.getString("userId"):requestWrapper.getParameter("userId");
orgId = requestWrapper.getParameter("orgId") == null ? body.getString("orgId"):requestWrapper.getParameter("orgId");
roleId = requestWrapper.getParameter("roleId") == null ? body.getString("roleId"):requestWrapper.getParameter("orgId");
}else{
userId = requestWrapper.getParameter("userId");
orgId = requestWrapper.getParameter("orgId");
roleId = requestWrapper.getParameter("roleId");
}
JSONObject res = new JSONObject();
if(StringUtils.isEmpty(userId) || StringUtils.isEmpty(orgId) || StringUtils.isEmpty(roleId)){//userId必传
response.setContentType("application/json;charset=utf-8");
response.setCharacterEncoding("UTF-8");
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
res.put("status",-1);
res.put("msg","缺少必填参数");
PrintWriter out = response.getWriter();
out.write(res.toString());
out.flush();
out.close();
return false;
}else{
//customCacheService.clear("Session", "YUSP" + "-" + userId);
AdminSmUserDetailVo userInfo = adminSmUserDao.getDetailById(userId);
Map<String,String> map = new HashMap<>();
map.put("role_id",roleId);
map.put("client_id","YUSP");
map.put("user_id",userId);
map.put("login_code",userInfo.getLoginCode());
map.put("org_id",orgId);
UserContext.addUserContexts(map);
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object Handler, ModelAndView modelAndView){
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object Handler, Exception ex){
}
}
配置类
package cn.com.yusys.yusp.mcp.config;
import cn.com.yusys.yusp.mcp.interceptor.McpInterceptor;
import cn.com.yusys.yusp.oca.interceptor.RequestFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.servlet.Filter;
@Configuration
public class WebConfig implements WebMvcConfigurer {
public static final int FIRST_ORDER = 10;
@Autowired
private McpInterceptor mcpInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry){
registry.addInterceptor(mcpInterceptor).addPathPatterns("/mcp/**").excludePathPatterns("/mcp/userCentre/listorgroles");
}
@Bean
public FilterRegistrationBean<Filter> RequestFilter() {
FilterRegistrationBean<Filter> registration = new FilterRegistrationBean();
registration.setFilter(new RequestFilter());
registration.addUrlPatterns("/mcp/*");
registration.setName("requestFilter");
registration.setOrder(FIRST_ORDER - 11);
return registration;
}
}