早教吧作业答案频道 -->其他-->
java过滤器怎么不过滤一个页面里包含的多个请求意思就是:我要访问的一个页面里包含了好几个action,我的过滤器会过滤jsp、html和action,现在我希望我的过滤器只过滤一次,简单描述就是用户
题目详情
java过滤器怎么不过滤一个页面里包含的多个请求
意思就是:我要访问的一个页面里包含了好几个action,我的过滤器会过滤jsp、html和action,现在我希望我的过滤器只过滤一次,简单描述就是用户点击一下,过滤器执行一次,
我的过滤器是为了用户访问页面进行抽奖的,用了2楼的方法的话那么就不能实现浏览页面抽奖了
意思就是:我要访问的一个页面里包含了好几个action,我的过滤器会过滤jsp、html和action,现在我希望我的过滤器只过滤一次,简单描述就是用户点击一下,过滤器执行一次,
我的过滤器是为了用户访问页面进行抽奖的,用了2楼的方法的话那么就不能实现浏览页面抽奖了
▼优质解答
答案和解析
abstract public class FilterPerRequest implements Filter {
private static final Boolean FILTERED = true;
private ThreadLocal statusLocal = new ThreadLocal();
@Override
final public void doFilter(ServletRequest req,ServletResponse resp,
FilterChain chain) throws IOException,ServletException {
if (hasNotFiltering()) {
doFilterAndDispatchRequest(req,resp,chain);
return;
}
//dispatch request only
chain.doFilter(req,resp);
}
private boolean hasNotFiltering() {
Boolean status = statusLocal.get();
if (status == null) {
return true;
}
return false;
}
private void doFilterAndDispatchRequest(ServletRequest req,
ServletResponse resp,FilterChain chain) throws IOException,
ServletException {
try {
doFilterPerRequest(req,resp);
setFiltered();
chain.doFilter(req,resp);
} finally {
cleanFilterStatus();
}
}
abstract protected void doFilterPerRequest(ServletRequest req,
ServletResponse resp);
private void setFiltered() {
statusLocal.set(FILTERED);
}
private void cleanFilterStatus() {
statusLocal.set(null);
}
}
那要就情况而定了.
如果是request范围内的话,就可以使用上面的过滤器.
如果是session范围内的话,就需要在session内存储一个标志变量,方式和request差不多.
如果是限制用户操作的话,那就必须将用户操作持久化.
由于你的问题不明确,我也不好多说...
private static final Boolean FILTERED = true;
private ThreadLocal statusLocal = new ThreadLocal();
@Override
final public void doFilter(ServletRequest req,ServletResponse resp,
FilterChain chain) throws IOException,ServletException {
if (hasNotFiltering()) {
doFilterAndDispatchRequest(req,resp,chain);
return;
}
//dispatch request only
chain.doFilter(req,resp);
}
private boolean hasNotFiltering() {
Boolean status = statusLocal.get();
if (status == null) {
return true;
}
return false;
}
private void doFilterAndDispatchRequest(ServletRequest req,
ServletResponse resp,FilterChain chain) throws IOException,
ServletException {
try {
doFilterPerRequest(req,resp);
setFiltered();
chain.doFilter(req,resp);
} finally {
cleanFilterStatus();
}
}
abstract protected void doFilterPerRequest(ServletRequest req,
ServletResponse resp);
private void setFiltered() {
statusLocal.set(FILTERED);
}
private void cleanFilterStatus() {
statusLocal.set(null);
}
}
那要就情况而定了.
如果是request范围内的话,就可以使用上面的过滤器.
如果是session范围内的话,就需要在session内存储一个标志变量,方式和request差不多.
如果是限制用户操作的话,那就必须将用户操作持久化.
由于你的问题不明确,我也不好多说...
看了 java过滤器怎么不过滤一个...的网友还看了以下:
已知字母组合成英语单词1、e e t t i n h r 2、e e r a t w h 3、o 2020-05-14 …
matlab 结果用参数表示syms t a b c h;u=a/(4*3*2*1)*t^4+b/ 2020-05-16 …
有关系模式A(C,T,H,R,S),根据语义有如下函数依赖集:F={C→T,(H,R) →C, (H 2020-05-23 …
关系模式R(C,T,H,R,S),有如下函数依赖集:F={C→T,(H,R)→C,(H,T)→R,( 2020-05-24 …
关系模式R(C,T,H,R,S),有如下函数依赖集: F={C→T,(H,R)→C,(H,T)→R, 2020-05-24 …
怎样用matlab解这个方程5*x*(exp(h*c/(k*x*t))-1)-h*c/(k*t)* 2020-06-03 …
t.c.h.o.u能组什么英语 2020-06-12 …
数学课本上讲lim△t→0h(2+△t)-h(2)/△t=-13.1,表示当t=2,△t趋近于0时 2020-07-21 …
推断题:现有如下反应(反应条件均不给),推断物质⑴A→B+C+D⑵C+E→C+F+D⑶D+G→H⑷ 2020-07-30 …
对函数f(x)=x+1-x2作x=h(t)的代换,则不改变函数f(x)值域的代换是()A.h(t)= 2021-01-07 …