java filter的类_Filter类

Filter类其实也是servlet,它的作用是客户端请求到达时未达到servlet处理前拦截请求,可以对HttpServletRequest进行预处理,然后再把请求转交给后续的servlet处理;它也可会HttpServletResponse返回客户端前进行后处理。

Filter的通常用法:

1.用户授权判断,当用户请求达到时,验证用户是否已通过登录授权。

2.日志记录处理,记录用户特殊用户请求。

3.解码处理,负责对请求的内容统一进行解码。

Filter类需要实现javax.servlet.Filter接口,该接口有3个方法:init()、doFilter()、destroy()。

Filter的配置:

1.可以使用注释方式,在filter类前使用@WebFilter注释,filterName属性指定filter名称,urlPatterns属性指定过滤路径。

2.在web.xml中配置方式

以使用Filter实际用户授权控制实例:

目录结构如下

lQBsF1Ro5yQAAAAASUVORK5CYII=

security目录下的资源需要授权后再能方式

login.jsp为登录页面,为了不引入新技术,没有使用struts,只使用html表单,表单的处理为login_proc.jsp。

login_proc.jsp为登录的处理页面(本应该使用servlet或者MVC框架来处理,为了省事而直接使用jsp页面,jsp其本质也是servlet),当用户名和密码均为admin时表示登录成功。

error.jsp为未授权访问security的提示页面。

firstfilter.java为Filter类,实现security访问授权控制。

security/index.jsp文件内容:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1

2 pageEncoding="utf-8"%>

3

4

5

6

7

授权访问首页

8

9

10

11

12

security/index.jsp

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1

2 pageEncoding="utf-8"%>

3

4

5

6

7

用户登录

8

9

10

11 用户名:

12 密码:

13

14

15

16

17

login.jsp

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1

2 pageEncoding="utf-8"%>

3

4

5

6

7

Filter实例

8

9

10

11 StringuserName=request.getParameter("userName");12 StringpassWord=request.getParameter("passWord");13 out.println(userName);14 out.println(passWord);15 if(userName.equals("admin")&&passWord.equals("admin"))16 {17 session.setAttribute("userName", userName);18 response.sendRedirect("security/index.jsp");19 }20 else

21 {22 response.sendRedirect("login.jsp");23 }24 %>

25

26

login_proc.jsp

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1

2 pageEncoding="utf-8"%>

3

4

5

6

7

不好意思,出错了!

8

9

10 你还没有登录,请先登录!11

12

13

error.jsp

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.info.filter;2

3 importjava.io.IOException;4

5 importjavax.servlet.Filter;6 importjavax.servlet.FilterChain;7 importjavax.servlet.FilterConfig;8 importjavax.servlet.ServletContext;9 importjavax.servlet.ServletException;10 importjavax.servlet.ServletRequest;11 importjavax.servlet.ServletResponse;12 importjavax.servlet.annotation.WebFilter;13 importjavax.servlet.http.HttpServletRequest;14 importjavax.servlet.http.HttpServletResponse;15 importjavax.servlet.http.HttpSession;16 importjavax.websocket.Session;17

18 @WebFilter(filterName="firstfilter"

19 ,urlPatterns={"/security/*"})20 public class firstfilter implementsFilter {21

22 privateFilterConfig config;23

24 @Override25 public voiddestroy() {26 //TODO Auto-generated method stub

27 this.config = null;28

29 }30

31 @Override32 public voiddoFilter(ServletRequest request1, ServletResponse response1, FilterChain chain)33 throwsIOException, ServletException {34 //TODO Auto-generated method stub

35

36 HttpServletRequest request =(HttpServletRequest) request1;37 HttpServletResponse response =(HttpServletResponse) response1;38

39 ServletContext context = this.config.getServletContext();40

41 HttpSession hsesson =request.getSession();42 if(hsesson.getAttribute("userName")==null || hsesson.getAttribute("userName").equals(""))43 {44 response.sendRedirect("/filterdemo/error.jsp");45 }46 else

47 {48 //将请求继续传递直至达到最终访问资源

49 chain.doFilter(request1, response1);50 }51

52

53 //--------------------Filter后处理开始-------------------------//

54 //TODO

55 }56

57 @Override58 public void init(FilterConfig config) throwsServletException {59 //TODO Auto-generated method stub

60

61 this.config=config;62

63 }64

65 }

firstfilter.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 <?xml version="1.0" encoding="UTF-8"?>

2

3 filterdemo

4

5 index.html

6 index.htm

7 index.jsp

8 default.html

9 default.htm

10 default.jsp

11

12

13 firstfilter

14 com.info.filter.firstfilter

15

16

17 firstfilter

18 /security/*

19

20

web.xml

注:web.xml中配置了filter类,则filter类中的注释则无效。

运行效果:

A1Jc8COKdY3mAAAAAElFTkSuQmCC

由于没有登录,Filter将请求转向error.jsp错误页面。

U4hpx63s9PdA75wwAAADNFC8HKAAAAACAOgQoAAAAAOgKAQoAAAAAukKAAgAAAICuEKAAAAAAoCsEKAAAAADoCgEKAAAAALpCgAIAAACArhCgAAAAAKArBCgAAAAA6AoBCgAAAAC6QoACAAAAgK4QoAAAAACgKwQoAAAAAOgKAQoAAAAAukKAAgAAAICuEKAAAAAAoCsEKAAAAADoCgEKAAAAALpCgAIAAACArhCgAAAAAKArBCgAAAAA6AoBCgAAAAC6QoACAAAAgK4QoAAAAACgKwQoAAAAAOgKAQoAAAAAuiIboP8PCi9l+KSLE4UAAAAASUVORK5CYII=

sPFAAAAJzhTN0EAAAAVKJuAgAAwI2omwAAAHAj6iYAAADciLoJAAAAN6JuAgAAwI2omwAAAHAj6iYAAADc6P8BIB7I8TkWhAUAAAAASUVORK5CYII=

登录成功后,授权页面访问成功!

x+pvZaCwXK+twAAAABJRU5ErkJggg==

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值