说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Filter究竟是什么?该怎么用?

编辑:说三道四文库 发布时间:2018-01-22 04:34
HTML文档下载 WORD文档下载 PDF文档下载
filter 框架 session zk spring 小弟一直不理解Filter究竟是什么。最近在用Hibernate+Spring+ZK(View层框架)做项目,做到了权限控制(user role authority)、访问控制(直接访问内部页面直接跳到Login),查了资料发现。
做访问控制的方法是Login的时候Session存个值,直接访问页面先session先get这个值 如果是null就自动跳到login,比较好的方法就是配置Filter,然后感觉对Filter有了个模糊大概的理解,解读代码发现是针对Servlet的。
问题:但是我用的是ZK框架,没用JSP(没Servlet),难道那种方式的Filter对我的框架不适用么?我需要配置针对我ZK框架的Filter?
或者有什么更好的做法么?本人首次单独开发项目,请各位大神指点,最好有代码啦,没配过Filter!
可以用spring的拦截器,跟filter差不多。效果比filter好
	<!-- LoginFilter -->
<filter>  
    <filter-name>LoginFilter</filter-name>  
    <filter-class>com.web.LoginFilter</filter-class>  
</filter>  
<filter-mapping>  
    <filter-name>LoginFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping>

package com.web;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginFilter implements Filter {
private String encoding;
@Override
public void init(FilterConfig filterconfig) throws ServletException {
encoding = "utf-8";
}

@Override
public void destroy() {
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse res=(HttpServletResponse)response;
HttpSession session=req.getSession();

if(session.getAttribute("jobNumber")!=null){
chain.doFilter(request, response);
}else{
res.sendRedirect(req.getContextPath()+"/login.jsp");
}
}
}




我访问非登录页面 也会自动转到login.jsp 的url , 但是就是不显示,去掉web.xml有效。我难道 xml配置有问题么?
过滤的时候要排除掉自己的登录页面
引用 3 楼 xinlan1022 的回复:
过滤的时候要排除掉自己的登录页面

我想排除login.jsp,那么我该怎么写呢
filter就好比你房间的门。要进入这个门,你必须要有这个门的钥匙也就是符合进入这个门的条件。
不会 来学习学习
引用 1 楼 wo99128608 的回复:
可以用spring的拦截器,跟filter差不多。效果比filter好
过滤器,主要是过滤用户请求的!
引用 2 楼 aquariusk 的回复:
	<!-- LoginFilter -->
<filter>  
    <filter-name>LoginFilter</filter-name>  
    <filter-class>com.web.LoginFilter</filter-class>  
</filter>  
<filter-mapping>  
    <filter-name>LoginFilter</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping>

package com.web;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginFilter implements Filter {
private String encoding;
@Override
public void init(FilterConfig filterconfig) throws ServletException {
encoding = "utf-8";
}

@Override
public void destroy() {
}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse res=(HttpServletResponse)response;
HttpSession session=req.getSession();

if(session.getAttribute("jobNumber")!=null){
chain.doFilter(request, response);
}else{
res.sendRedirect(req.getContextPath()+"/login.jsp");
}
}
}




我访问非登录页面 也会自动转到login.jsp 的url , 但是就是不显示,去掉web.xml有效。我难道 xml配置有问题么?

在filter的判断要在chain.doFilter(request, response);后面,不然你没有登录的时候拦截会出错的
filter就是过滤器,和struts的中央控制器一样的配置,主要来说适合用filter的就用,不适合用也可以,主要看你个人爱好
举个例子吧:
filter:酒店房间刷卡,进入只要刷卡就可以了,出来就直接关门,而不用刷卡,这相当于的filter的功能。
拦截器:上下班,上班打卡,下班打卡,这个就相当于拦截器的功能...
像水印,图片压缩,中文乱码之类的,用filter就行了,用拦截器有点浪费了,而已影响性能
我就是来学习的
中国&#183;北京第一届开源大会Hadoop专场侧记:Hadoop已经成为大数据分析平台的标配 Marissa Mayer为何带雅虎重回门户时代? 开发者最爱的三款开发工具 Facebook开源JavaScript库:React 硬件天堂深圳行:从Seeed Studio、Knewone到柴火创客空间 为什么dev-C++包含<iostream.h>时会编译通不过?急 bcb里对于怎么样创建、修改、保存word文档,并且保存到数据库!能做到吗?怎么做啊! 唉,郁闷呀,平时不注重算法的后果 请兄弟们帮忙! 怎样动态设置数据源 请教高手系统设计问题? CMOS密碼 如何查找并列出一个LAN中所有的SQL服务器以及其上的数据库的名字? 做过 win98 下的 Passthru 请进来。 脸上皮肤用了碘酊之后没有用酒精脱碘,被腐蚀,自己会 使用含酒精的化妆水会怎样? 蝶翠诗滋养化妆水含酒精成分吗 如何辨别柔肤水里是否含有酒精 哪位知道什么柔肤水不含香精、酒精等刺激性的成分且含 把含酒精的化妆水打开盖子,化妆水里面的酒精会挥发吗 怎样使酒里的酒精快速挥发,同时保留酒里的其它成分? 为什么大多数爽肤水、柔肤水内含有酒精成分?它起到什 丙二醇 酒精湿纸巾上写不含酒精..究竟是乙醇..乙 外媒:中国经略周边消除“中国威胁论”美媒:安倍讲话相当于给中国人“当面一韩向美要求:日本行使集体自卫权时需先阿根廷举行中期议会选举 女总统执政联马达加斯加大选结束 各方观察团认为投人生有两个账户人民币惊天大贬值,又一轮爆富的机会,艾紫馨:10月21晚现货白银宁贵银铜比贫穷更可怕的是不体面天合光能云南最大单体电站并网近七成和傲娇妹妹同居的日子一不小心成土豪末日商超系统日规剑舞玄天潼关旅游杨柳村旅游东海旅游凤县旅游白城旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘