早教吧作业答案频道 -->其他-->
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过滤器怎么不过滤一个...的网友还看了以下:
维吾尔族语言(I狼拾给)是什么意思?大概就是“I(I就是英语中的我)狼拾给”,知道的朋友请说一下, 2020-04-07 …
找一个英文单词!意思是“掠夺者”,但是希望意思离“盗贼、偷盗”这类意思要尽可能远点,就是很单纯的强 2020-06-04 …
我的名字“禾希”的意思?禾希首先合起来是稀,代表现世代我这样的美男加好男人已经相当稀少了.禾,代表 2020-06-16 …
仿句希望就是一颗永远不陨落的恒星例句:希望就是一颗永不陨落的恒星希望就是()希望就是() 2020-06-17 …
为什么使用高压输送可以减少电流的损失?我听别人说是根据P=UI,在保证输出功率不变的情况下,U提高 2020-07-20 …
生活就是一块五彩斑斓的调色板仿照希望就是.童年就是生活就是一块五彩斑斓的调色板.仿照希望就是.童年就 2020-11-01 …
希望的文章用这样一张照片写一篇150字的文章,照片的意思是一位农村的傻子看见城里来的恩傻傻的笑了,感 2020-12-01 …
一个超光速的可能直接将超导体接在电源两端,那么根据I=U/R,R=0那么I就会无穷大,根据I=Q/T 2021-01-13 …
ice的i这句话用英语怎么说?背景是拼写名字的时候'人家会问'是哪个字母?i就是的ice的i无就是一 2021-02-04 …
英语翻译就是一个以i开头的单词.一个以l开头的单词...接下去一样...翻译成搞笑的“非诚勿扰”就像 2021-02-05 …