应用场景,使用第三方服务,需要通过url添加fid字段对能够访问的权限进行控制
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
***************************web,xml的配置****************************************
<filter>
<filter-name>WebForwardFliter</filter-name>
<filter-class>filter.WebForwardFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>WebForwardFliter</filter-name>
<url-pattern>/TestServlet/*</url-pattern>
</filter-mapping>
</web-app>
@WebFilter(urlPatterns = "/web_war_exploded*")
public class WebForwardFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
if (servletRequest instanceof HttpServletRequest) {
HttpServletRequest req = (HttpServletRequest) servletRequest;
String uri = req.getRequestURI();
if (uri.contains("TestServlet")) {
System.out.println(uri);
String newPath = uri.replace("web_war_exploded/","");
try{
Map parameterMap = servletRequest.getParameterMap();
//map字段开始的时候是被锁住的,需要解锁修改
Method method = parameterMap.getClass().getMethod("setLocked", new Class[]{boolean.class});
method.invoke(parameterMap, new Object[]{new Boolean(false)});
parameterMap.remove("fid");
parameterMap.put("fid",new String[]{"16017"});
method.invoke(parameterMap, new Object[]{new Boolean(true)});
}catch(Exception e){
System.out.println(""+e.toString());
}
System.out.println(newPath);
RequestDispatcher requestDispatcher = servletRequest.getRequestDispatcher(newPath);
requestDispatcher.forward(servletRequest, servletResponse);
return;
}
}
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
}