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

「已注销」 2014-08-30 09:44:13
小弟一直不理解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!
...全文
509 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyx100 2014-09-01
  • 打赏
  • 举报
回复
引用 1 楼 wo99128608 的回复:
可以用spring的拦截器,跟filter差不多。效果比filter好
无情天下 2014-09-01
  • 打赏
  • 举报
回复
filter就是过滤器,和struts的中央控制器一样的配置,主要来说适合用filter的就用,不适合用也可以,主要看你个人爱好 举个例子吧: filter:酒店房间刷卡,进入只要刷卡就可以了,出来就直接关门,而不用刷卡,这相当于的filter的功能。 拦截器:上下班,上班打卡,下班打卡,这个就相当于拦截器的功能... 像水印,图片压缩,中文乱码之类的,用filter就行了,用拦截器有点浪费了,而已影响性能
人生重来 2014-09-01
  • 打赏
  • 举报
回复
引用 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);后面,不然你没有登录的时候拦截会出错的
LOVE-漂泊 2014-09-01
  • 打赏
  • 举报
回复
过滤器,主要是过滤用户请求的!
iversonfor2 2014-09-01
  • 打赏
  • 举报
回复
我就是来学习的
人生重来 2014-08-30
  • 打赏
  • 举报
回复
可以用spring的拦截器,跟filter差不多。效果比filter好
gg666gg11 2014-08-30
  • 打赏
  • 举报
回复
不会 来学习学习
yzsunlight 2014-08-30
  • 打赏
  • 举报
回复
filter就好比你房间的门。要进入这个门,你必须要有这个门的钥匙也就是符合进入这个门的条件。
「已注销」 2014-08-30
  • 打赏
  • 举报
回复
引用 3 楼 xinlan1022 的回复:
过滤的时候要排除掉自己的登录页面
我想排除login.jsp,那么我该怎么写呢
xinlan1022 2014-08-30
  • 打赏
  • 举报
回复
过滤的时候要排除掉自己的登录页面
「已注销」 2014-08-30
  • 打赏
  • 举报
回复
	<!-- 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配置有问题么?

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧