为什么会有这个需求呢? 因为被 cas 的AuthenticationFilter
坑了
下一篇再说一下AuthenticationFilter
的坑,这里主要说修改请求的参数
代码是从网上找的,找不到具体来源了,直接贴代码吧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 package com.birdzhang.plugin;import java.util.Collections;import java.util.Enumeration;import java.util.HashMap;import java.util.Map;import java.util.TreeMap;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;public class PrettyFacesWrappedRequest extends HttpServletRequestWrapper { private final Map<String, String[]> modifiableParameters; private Map<String, String[]> allParameters = null ; public PrettyFacesWrappedRequest (final HttpServletRequest request, final Map<String, String[]> additionalParams) { super (request); modifiableParameters = new HashMap<String, String[]>(); modifiableParameters.putAll(additionalParams); } @Override public String getParameter (final String name) { String[] strings = getParameterMap().get(name); if (strings != null ) { return strings[0 ]; } return super .getParameter(name); } @Override public Map<String, String[]> getParameterMap() { if (allParameters == null ) { allParameters = new TreeMap<String, String[]>(); Map<String, String[]> superMap = super .getParameterMap(); for (String key : superMap.keySet()) { if (key.equals("ticket" )) { allParameters.put("token" , superMap.get(key)); }else { allParameters.put(key, superMap.get(key)); } } allParameters.putAll(modifiableParameters); } return Collections.unmodifiableMap(allParameters); } @Override public Enumeration<String> getParameterNames () { return Collections.enumeration(getParameterMap().keySet()); } @Override public String[] getParameterValues(final String name) { return getParameterMap().get(name); } }
使用:
1 2 3 4 Map<String, String[]> extraParams = new HashMap<String, String[]>(); HttpServletRequest wrappedRequest = new PrettyFacesWrappedRequest(request, extraParams); request.getRequestDispatcher(request.getRequestURI()).forward(wrappedRequest, response); return ;
完美的将ticket
参数替换为token
参数