You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
4.3 KiB
110 lines
4.3 KiB
package com.fr.plugin; |
|
|
|
import com.fr.decision.ExtraDecisionClassManager; |
|
import com.fr.decision.fun.GlobalRequestFilterProvider; |
|
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; |
|
import com.fr.event.Event; |
|
import com.fr.event.EventDispatcher; |
|
import com.fr.event.Listener; |
|
import com.fr.log.FineLoggerFactory; |
|
import com.fr.plugin.context.PluginContext; |
|
import com.fr.plugin.injectable.PluginModule; |
|
import com.fr.plugin.observer.PluginEventType; |
|
import com.fr.stable.StringUtils; |
|
|
|
import javax.servlet.FilterChain; |
|
import javax.servlet.FilterConfig; |
|
import javax.servlet.http.HttpServletRequest; |
|
import javax.servlet.http.HttpServletResponse; |
|
import java.util.Set; |
|
|
|
/** |
|
* @author Peng |
|
*/ |
|
public class QYGlobalRequestFilterPlaceHolder extends AbstractGlobalRequestFilterProvider { |
|
private static final String CURRENT_PLUGIN_ID = "com.eco.plugin.zzl.qywxp";//需要求个这两个配置 |
|
private static final String CURRENT_FILTER_NAME = "qywxfilter"; |
|
private static GlobalRequestFilterProvider PLACE_HOLDER_IMPL_FILTER; |
|
|
|
@Override |
|
public void init(FilterConfig filterConfig) { |
|
Set<GlobalRequestFilterProvider> providers = ExtraDecisionClassManager.getInstance().getArray(GlobalRequestFilterProvider.MARK_STRING); |
|
if (providers != null) { |
|
for (GlobalRequestFilterProvider provider : providers) { |
|
String filterName = provider.filterName(); |
|
if (StringUtils.isNotEmpty(filterName) && CURRENT_FILTER_NAME.equals(filterName)) { |
|
PLACE_HOLDER_IMPL_FILTER = provider; |
|
break; |
|
} |
|
} |
|
} |
|
|
|
com.fr.stable.Filter<PluginContext> filter = new com.fr.stable.Filter<PluginContext>() { |
|
@Override |
|
public boolean accept(PluginContext context) { |
|
String pluginId = context.getID(); |
|
return context.contain(PluginModule.ExtraDecision, GlobalRequestFilterProvider.MARK_STRING) && CURRENT_PLUGIN_ID.equals(pluginId); |
|
} |
|
}; |
|
|
|
EventDispatcher.listen(PluginEventType.AfterRun, new Listener<PluginContext>() { |
|
@Override |
|
public void on(Event event, PluginContext context) { |
|
Set<GlobalRequestFilterProvider> providers = context.getRuntime().get(PluginModule.ExtraDecision, GlobalRequestFilterProvider.MARK_STRING); |
|
if (providers != null) { |
|
for (GlobalRequestFilterProvider provider : providers) { |
|
String filterName = provider.filterName(); |
|
if (StringUtils.isNotEmpty(filterName) && CURRENT_FILTER_NAME.equals(filterName)) { |
|
PLACE_HOLDER_IMPL_FILTER = provider; |
|
break; |
|
} |
|
} |
|
} |
|
} |
|
}, filter); |
|
|
|
EventDispatcher.listen(PluginEventType.BeforeStop, new Listener<PluginContext>() { |
|
@Override |
|
public void on(Event event, PluginContext context) { |
|
PLACE_HOLDER_IMPL_FILTER = null; |
|
} |
|
}, filter); |
|
} |
|
|
|
@Override |
|
public String filterName() { |
|
return "fGlobalRequestFilterPlaceHolder"; |
|
} |
|
|
|
@Override |
|
public String[] urlPatterns() { |
|
return new String[]{ |
|
"/*" |
|
}; |
|
} |
|
|
|
@Override |
|
public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) { |
|
try { |
|
process(request, response, filterChain); |
|
} catch (Exception e) { |
|
FineLoggerFactory.getLogger().error(e, e.getMessage()); |
|
try { |
|
filterChain.doFilter(request, response); |
|
} catch (Exception ex) { |
|
FineLoggerFactory.getLogger().error(ex, ex.getMessage()); |
|
} |
|
} |
|
} |
|
|
|
public void process(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws Exception { |
|
if (PLACE_HOLDER_IMPL_FILTER == null) { |
|
if (FineLoggerFactory.getLogger().isDebugEnabled()) { |
|
FineLoggerFactory.getLogger().debug("[GlobalRequestFilterPlaceHolder] placeHolderImplFilter 为 null"); |
|
} |
|
filterChain.doFilter(request, response); |
|
} else { |
|
PLACE_HOLDER_IMPL_FILTER.doFilter(request, response, filterChain); |
|
} |
|
} |
|
}
|
|
|