javaWeb进阶之Filter过滤器

本文详细介绍了如何在Web应用中设定中文字符集,确保中文内容正确显示,同时展示了如何利用Filter拦截未登录用户的请求,引导其至登录页面。通过在doFilter方法中检查用户会话状态,实现对特定URL的访问权限控制。

摘要

实现了中文字符集设定和对未登录用户请求拦截。

Filter的生命周期

服务器开启时执行init,之后每一个请求都会执行doFilter操作,那么我们在doFilter处理每次请求即可。

Filter生命周期

关键代码

在doFilter中,设置request.setCharacterEncoding(UTF-8),就能实现中文字符集

@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		
		String characterEncoding = config.getInitParameter("characterEncoding");
		request.setCharacterEncoding(characterEncoding);
		chain.doFilter(request, response);
		
	}

详解Filter过滤未登陆用户

我们需要指定FIlter的作用连接,然后当用户请求这些url,该Filter过滤器就会按照生命周期进行活动,我们在doFilter中验证是否登陆了用户即可。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		 
		System.out.println("------- doFilter create ---------");
		HttpServletRequest hRequest = (HttpServletRequest) request;
		HttpServletResponse hResponse = (HttpServletResponse)response;
		 
		 User loginUser = (User)hRequest.getSession().getAttribute("user");
		 if(loginUser == null) {
			
			 // 有个问题,login.jsp也是请求,如何开发限定页面不受filter作用呢,答案就是设置web.xml
			 System.out.println("还没登陆啊,我要去: " + hRequest.getContextPath()+"/login.jsp");
			 hRequest.setAttribute("msg", "None login");
			 hResponse.sendRedirect(hRequest.getContextPath()+"/login.jsp");
			 
			 return;
		 }else {
			 System.out.println("当前存在登陆对象啊: " + loginUser.getUsername());
			 chain.doFilter(request, response);
			 return;
		 }
		
	}
添加多个匹配url
<filter>  
    <filter-name>authority</filter-name>  
    <filter-class>com.util.AuthorityFilter</filter-class>  
</filter>  
<filter-mapping>  
    <filter-name>authority</filter-name>  
       <url-pattern>/pages/genbill/*</url-pattern>  
</filter-mapping>  
<filter-mapping>  
    <filter-name>authority</filter-name>  
    <url-pattern>/pages/cmm/*</url-pattern>  
</filter-mapping> 

dispatcher 配置
1、request

也就是默认的配置

<filter-mapping>
	<dispatcher>REQUEST<dispatcher>
</filter-mapping>
2、include

当前项执行的同时执行include的内容

<filter-mapping>
	<dispatcher>INCLUDE<dispatcher>
</filter-mapping>
3、forword

forword的url通过request.getRequestDispatcher(xxx.jsp).forword(request,response重定向调用的话,过滤器触发

针对xxx.jsp的filter

<filter-mapping>
	<url-pattern>/xxx.jsp</url-pattern>
	<dispatcher>FORWORD<dispatcher>
</filter-mapping>
4、ERROR

在xxx.jsp下,触发了404,那么过滤器执行

<filter-mapping>
	<url-pattern>/xxx.jsp</url-pattern>
	<dispatcher>FORWORD<dispatcher>
</filter-mapping>

<error-page>
	<error-code>404<error>
	<location>404.jsp<error>
</error-page>
触发404的方法
response.sendError(404);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值