依赖
javax.servlet
javax.servlet-api
provided
包装类
package com.djhu.portal.as.common;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.HashMap;
import java.util.Map;
public class RequestParameterWrapper extends HttpServletRequestWrapper {
private Map<String, String[]> params = new HashMap<String, String[]>();
public RequestParameterWrapper(HttpServletRequest request) {
super(request);
//将现有parameter传递给params
this.params.putAll(request.getParameterMap());
}
/**
* 重载构造函数
* @param request
* @param extraParams
*/
public RequestParameterWrapper(HttpServletRequest request, Map<String, Object> extraParams) {
this(request);
addParameters(extraParams);
}
public void addParameters(Map<String, Object> extraParams) {
for (Map.Entry<String, Object> entry : extraParams.entrySet()) {
addParameter(entry.getKey(), entry.getValue());
}
}
/**
* 重写getParameter,代表参数从当前类中的map获取
* @param name
* @return
*/
@Override
public String getParameter(String name) {
String[]values = params.get(name);
if(values == null || values.length == 0) {
return null;
}
return values[0];
}
/**
* 同上
* @param name
* @return
*/
@Override
public String[] getParameterValues(String name) {
return params.get(name);
}
/**
* 添加参数
* @param name
* @param value
*/
public void addParameter(String name, Object value) {
if (value != null) {
System.out.println(value);
if (value instanceof String[]) {
params.put(name, (String[]) value);
} else if (value instanceof String) {
params.put(name, new String[]{(String) value});
} else {
params.put(name, new String[]{String.valueOf(value)});
}
}
}
}
过滤器
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.djhu.portal.as.interceptor;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ats.portal.permi.dao.UserinfoDAO;
import com.ats.portal.permi.pojo.Userinfo;
import com.ats.portal.redis.util.RedisUtil;
import com.djhu.portal.as.common.CheckSwitchConfig;
import com.djhu.portal.as.common.RequestParameterWrapper;
import com.djhu.portal.as.common.StaticSwitch;
import com.djhu.portal.as.service.PortalUserDetailService;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.codec.Base64;
import org.springframework.security.crypto.codec.Hex;
import org.springframework.security.crypto.codec.Utf8;
import org.springframework.security.web.DefaultRedirectStrategy;
import org.springframework.security.web.RedirectStrategy;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Service(value = “customAuthenticationFilter”)
public class CustomUsernamePasswordAuthenticationFilter implements Filter {
private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
private static final String CLIENT_ID = "client_id";
private static final String REDIRECT_URI = "redirect_uri";
private Map<String,Long> mapId = new HashMap<String,Long>();//存放身份鉴别字段查询出的用户Id的结果
private Map<String,String> map = new HashMap<String,String>();//存放用户登录提交的信息
//身份鉴别
private Boolean isPassOfUserName = false;//用户名是否存在
private Boolean isPassOfEmployeeNumber = false;//工号是否通过校验
private Boolean isPassOfphone = false;//手机号是否通过校验
private Boolean isPassOfIDnumber = false;//身份证号是否通过校验
@Autowired
private CheckSwitchConfig checkSwitchConfig;
@Autowired
private RedisUtil redisUtil;
@Autowired
private UserinfoDAO userinfoDAO;
private final Logger logger = LoggerFactory.getLogger(PortalUserDetailService.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//需要先判断是不是通过提交登录表单进入过滤器
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse)servletResponse;
logger.info(request.getParameter("username")+"======================================================================================================================");
if(request.getParameter("username")!=null){
JSONObject jsonObject = JSONObject.fromObject(request.getParameter("username"));
if(this.accessFilterByLogin(jsonObject,request.getParameter("username"))){//判断是否是Spring容器加载时进入过滤器
Map<String, Object> extraParams = new HashMap<String, Object>();
//获取原有的参数,并放入map中
extraParams = this.saveTheOriginalParameters(request,response,jsonObject,request.getParameter("username").toString());
//利用原始的request对象创建自己扩展的request对象并添加自定义参数
RequestParameterWrapper requestParameterWrapper = new RequestParameterWrapper(request);
requestParameterWrapper.addParameters(extraParams);
filterChain.doFilter(requestParameterWrapper, servletResponse);
}else{
filterChain.doFilter(servletRequest,servletResponse);
}
}else{
filterChain.doFilter(servletRequest,servletResponse);
}
}
@Override
public void destroy() {
}
}