改变spring过滤器Filter中改变传递的参数内容并向下一个过滤器传递

依赖

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() {

}

}

发布了13 篇原创文章 · 获赞 3 · 访问量 2058

猜你喜欢

转载自blog.csdn.net/qq_33337186/article/details/98971411