最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

Filter的用法总结

来源:动视网 责编:小OO 时间:2025-09-27 00:10:07
文档

Filter的用法总结

Filter的用法总结Filter是Web编程里一把利器,它本质上就是一个,但实际应用中很灵活,用途也很广,下面是本人在开发中对filter应用的一个小结:1)转换字符编码中文网页编码常用的就是gb2312或是UTF-8,但TOMCAT会默认用编码iso-8859-1,所以需要把所有经过TOMCAT的中文字符进行转换,如果手动在request里改很麻烦,可以用一个filter对所有的request进行拦截,进行编码转换,一劳永逸2)管理Hibernate的session在Web里用Hib
推荐度:
导读Filter的用法总结Filter是Web编程里一把利器,它本质上就是一个,但实际应用中很灵活,用途也很广,下面是本人在开发中对filter应用的一个小结:1)转换字符编码中文网页编码常用的就是gb2312或是UTF-8,但TOMCAT会默认用编码iso-8859-1,所以需要把所有经过TOMCAT的中文字符进行转换,如果手动在request里改很麻烦,可以用一个filter对所有的request进行拦截,进行编码转换,一劳永逸2)管理Hibernate的session在Web里用Hib
Filter的用法总结

Filter是Web编程里一把利器,它本质上就是一个,但实际应用中很灵活,用途也很广,下面是本人在开发中对filter应用的一个小结:

1)转换字符编码

中文网页编码常用的就是gb2312或是UTF-8,但TOMCAT会默认用编码iso-8859-1,所以需要把所有经过TOMCAT的中文字符进行转换,如果手动在request里改很麻烦,可以用一个filter对所有的request进行拦截,进行编码转换,一劳永逸

2)管理Hibernate的session

在Web 里用Hibernate常常是把session绑定到线程,但往往要求一个session在一个请求的活动中都有效,这样可以保证同一活动中能共享lazy bean。用filter能到达这个目的,在doFilter之前绑定session到线程,在doFilter后关闭session,这样既可以保证session不会泄漏,也能让lazy bean在同一请求周期里共享

3)做权限审查

在web层里需要对很多资源进行逻辑类似的安全保障,通过filter可以在调用这些资源前加上一个屏障,这样既可以把安全代码和逻辑代码相分离,也可以很好的reuse这些安全模块4)做cache

在web层常常需要对一些请求返回进行缓存,这样可以有效的减轻服务器的压力,filter可以对请求进行拦截,查询缓存,若有效则直接返回缓存内容,若无效则进行实际的服务器请求,返回给用户,并对缓存进行更新,以备下次请求

5)做的代理

有的时候需要把一些用到web层,filter可以很好地充当代理的角色,比如可以在Spring里做好的Bean,再通过filter把这些Bean和相应的web请求桥接起来。

6)过滤特殊字符

有时需要过滤特殊字符,比如防止sql注入,Filter可以很好达到这个目的

∙doFilter(ServletRequest request,ServletResponse response,FilterChain next) throws IOException,ServletException{

∙HttpServletRequest req = (HttpServletRequest)request;

∙HttpServletResponse resp = (HttpServletResponse)response;

∙HttpSession session = req.getSession();

∙String requesturi = req.getRequestURI();

∙if(requesturi.endsWith("css")

∙|| requesturi.endsWith("js")

∙|| requesturi.endsWith("login.jsp")

∙|| requesturi.endsWith("login.action")

∙|| requesturi.endsWith("Logout.action")

∙|| session.getAttribute(Constants.USER_KEY) != null){

∙next.doFilter(request, response);

∙∙}else if(session.getAttribute(Constants.USER_KEY) == null

∙){

∙resp.sendRedirect("/PowerGrid/login.jsp");

∙}

众所周知,如果没有对页面进行权限控制,用户只要输入URL就能进入任何页面。

下面就演示一下最基本的使用Fiter来控制页面的权限。

1.写一个FILTER,用来判断用户是否有权限进入指定页面。

java 代码

1import java.io.IOException;

2

3import javax.servlet.Filter;

4import javax.servlet.FilterChain;

5import javax.servlet.FilterConfig;

6import javax.servlet.ServletException;

7import javax.servlet.ServletRequest;

8import javax.servlet.ServletResponse;

9import javax.servlet.http.HttpServlet;

10import javax.servlet.http.HttpServletRequest;

11import javax.servlet.http.HttpServletResponse;

12import javax.servlet.http.HttpSession;

13

14import org.apache.log4j.Logger;

15

16import com.kiral.action.UserAction;

17import com.kiral.model.User;

18

19/*********************************************************************** ********

20* 在过滤器中实现权限控制类,用来检验用户是否有权限进入当前页面

21*

22* @作者:kiral

23* @日期:2006-6-24

24* @版本: 1.0

25

*************************************************************************** ***/

26public class FilterServlet extends HttpServlet implements Filter {

27private static final long serialVersionUID = 51621625393315379L;

2829private static Logger LOG = Logger.getLogger(FilterServlet.class);

30

31/**

32* 配置允许的角色

33*/

34private String allowRole = null;

35

36/**

37* 重定向的URL

38*/

39private String redirectURl = null;

40

41public void init(FilterConfig filterConfig) throws ServletException {

42// 得到允许的角色,这个参数是由web.xml里的allowRole所指定

43allowRole = filterConfig.getInitParameter("allowRole");

44// 指定要重定向的页面

45redirectURl = "/locker/index.html";

46}

47

48/**

49* 在过滤器中实现权限控制

50*/

51public void doFilter(ServletRequest sRequest, ServletResponse sResponse,

52FilterChain filterChain) throws IOException, ServletException {

53HttpServletRequest request = (HttpServletRequest) sRequest;

54HttpServletResponse response = (HttpServletResponse) sResponse;

55HttpSession session = request.getSession();

56

57// 如果回话中的用户为空,页面重新定向到登陆页面

58if (session.getAttribute(UserAction.CURRENT_USER) == null) {

59response.sendRedirect(redirectURl);

60}

61// 会话中存在用户,则验证用户是否存在当前页面的权限

62else {

63User user = (User) session.getAttribute(UserAction.CURRENT_USER); try {

65// 如果用户没有当前页的权限,页面重新定向到登陆页面

66if ("0".equals(allowRole) || user.hasPower(allowRole)) {

67filterChain.doFilter(sRequest, sResponse);

68} else {

69// 过滤器经过过滤后,过滤链继续传递请求和响应

70response.sendRedirect(redirectURl);

71}

72} catch (Throwable e) {73LOG.error("权限过滤时候出现错误

74throw new RuntimeException("权限过滤时候出现错误

75}

76}

77}

78

79public void destroy() {

80}

81

82}

在web.xml中配置要过滤的页面和能进入当前页面的角色

xml 代码

83

84

85UserAdminfilter-name>

86

87com.emap.web.FilterServletfilter-class>

88

90

91allowRoleparam-name>

921param-value>

93init-param>

94filter>

95

96UserAdminfilter-name>

97/jsp/security/*url-pattern>

98filter-mapping>

上面配置的意思是说,当用户进入/jsp/security文件夹下的页面的时候,程序会进入FilterServlet 里的doFilter方法里,进行权限判断。

其他的页面权限控制:

1.你可以在filter里判断用户是否登录,然后需要特殊权限能访问的页面,在页面里进行判断。

2.推荐使用开源框架ACEGI来进行权限控制。

文档

Filter的用法总结

Filter的用法总结Filter是Web编程里一把利器,它本质上就是一个,但实际应用中很灵活,用途也很广,下面是本人在开发中对filter应用的一个小结:1)转换字符编码中文网页编码常用的就是gb2312或是UTF-8,但TOMCAT会默认用编码iso-8859-1,所以需要把所有经过TOMCAT的中文字符进行转换,如果手动在request里改很麻烦,可以用一个filter对所有的request进行拦截,进行编码转换,一劳永逸2)管理Hibernate的session在Web里用Hib
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top