本文研究的主要是Java中filter过滤器的相关用法,具体实现代码如下。
filter过滤器主要使用于前台向后台传递数据是的过滤操作。程度很简单就不说明了,直接给几个已经写好的代码:
一、使浏览器不缓存页面的过滤器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 用于的使 Browser 不缓存页面的过滤器
*/
public class ForceNoCacheFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException
{
((HttpServletResponse) response).setHeader( "Cache-Control" , "no-cache" );
((HttpServletResponse) response).setHeader( "Pragma" , "no-cache" );
((HttpServletResponse) response).setDateHeader ( "Expires" , - 1 );
filterChain.doFilter(request, response);
}
public void destroy()
{
}
public void init(FilterConfig filterConfig) throws ServletException
{
}
}
|
二、检测用户是否登陆的过滤器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
public class CheckLoginFilter implements Filter {
protected FilterConfig filterConfig = null ;
private String redirectURL = null ;
private List notCheckURLList = new ArrayList();
private String sessionKey = null ;
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
{
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpSession session = request.getSession();
if (sessionKey == null )
{
filterChain.doFilter(request, response);
return ;
}
if ((!checkRequestURIIntNotFilterList(request)) && session.getAttribute(sessionKey) == null )
{
response.sendRedirect(request.getContextPath() + redirectURL);
return ;
}
filterChain.doFilter(servletRequest, servletResponse);
}
public void destroy()
{
notCheckURLList.clear();
}
private boolean checkRequestURIIntNotFilterList(HttpServletRequest request)
{
String uri = request.getServletPath() + (request.getPathInfo() == null ? "" : request.getPathInfo());
return notCheckURLList.contains(uri);
}
public void init(FilterConfig filterConfig) throws ServletException
{
this .filterConfig = filterConfig;
redirectURL = filterConfig.getInitParameter( "redirectURL" );
sessionKey = filterConfig.getInitParameter( "checkSessionKey" );
String notCheckURLListStr = filterConfig.getInitParameter( "notCheckURLList" );
if (notCheckURLListStr != null )
{
StringTokenizer st = new StringTokenizer(notCheckURLListStr, ";" );
notCheckURLList.clear();
while (st.hasMoreTokens())
{
notCheckURLList.add(st.nextToken());
}
}
}
}
|
三、字符编码的过滤器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import javax.servlet.*;
import java.io.IOException;
/**
* 用于设置 HTTP 请求字符编码的过滤器,通过过滤器参数encoding指明使用何种字符编码,用于处理Html Form请求参数的中文问题
*/
public class CharacterEncodingFilter
implements Filter
{
protected FilterConfig filterConfig = null ;
protected String encoding = "" ;
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
{
if (encoding != null )
servletRequest.setCharacterEncoding(encoding);
filterChain.doFilter(servletRequest, servletResponse);
}
public void destroy()
{
filterConfig = null ;
encoding = null ;
}
public void init(FilterConfig filterConfig) throws ServletException
{
this .filterConfig = filterConfig;
this .encoding = filterConfig.getInitParameter( "encoding" );
}
}
|
四、记录用户的访问操作器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
package com.qwserv.itm.pfl.log.svr;
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 java.text.SimpleDateFormat;
import javax.servlet.http.HttpServletRequest;
import com.qwserv.itm.api.pfl.sm.vo.Person;
import java.sql.*;
import com.qwserv.itm.api.ServiceAccess;
import com.qwserv.itm.util.toolkit.DebugUtil;
public class ObserveFilter implements Filter {
protected static DebugUtil log = DebugUtil.getInstances( "pfl-log" , ObserveFilter. class );
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
//记录用户的访问操作
HttpServletRequest request1 = (HttpServletRequest)request;
StringBuffer url = request1.getRequestURL();
//对url进行过滤,如果是js/css/image则不进行处理
if (judgeFile(url.toString())){
String operTime = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ).
format( new java.util.Date());
String hostIp = request.getRemoteAddr();
String sessionId = request1.getRequestedSessionId();
String userId = "" ;
Person person = (Person)request1.getSession().getAttribute( "userObj" );
if ( null != person && null != person.getUser()){
userId = person.getUser().getId();
}
String queryString = request1.getQueryString();
if ( null != queryString) {
url.append( '?' );
url.append(queryString);
}
//保存到数据库中
saveToDb(userId,hostIp,sessionId,url.toString(),operTime, "" );
}
// Pass control on to the next filter
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
}
public Boolean judgeFile(String url){
if (url.endsWith( ".gif" ) || url.endsWith( ".jpg" ) || url.endsWith( ".png" )
|| url.endsWith( ".bmp" ) || url.endsWith( ".css" ) || url.endsWith( ".js" )
|| url.endsWith( ".jsx" )){
return false ;
} else {
return true ;
}
}
public int saveToDb(String userId, String hostIp,String sessionId,String url,
String operTime,String desc){
//将报表任务数据保存到数据库中
Connection conn = null ;
Statement st = null ;
try {
//构造sql表达式,将数据插入数据库
conn = ServiceAccess.getSystemSupportService().getDefaultConnection();
st = conn.createStatement();
String sql = "insert into LOG_OBSERVE_HISTORY(USERID,URL,Detail,SessionID,HostName,StartDate) values('" +
userId + "','" + url + "','" + desc + "','" + sessionId
+ "','" + hostIp + "','" + operTime + "')" ;
if (ServiceAccess.getSystemSupportService().getConnectionType(conn)==ServiceAccess.getSystemSupportService().JCA_TYPE_ORACLE){
sql = "insert into LOG_OBSERVE_HISTORY(Id,USERID,URL,Detail,SessionID,HostName,StartDate) values(LOG_OBSERVE_SEQ.nextval,'" +
userId + "','" + url + "','" + desc + "','" + sessionId
+ "','" + hostIp + "',TO_DATE('" + operTime
+ "','YYYY-MM-DD HH24:MI:SS'))" ;
}
st.executeUpdate(sql);
}
catch (Exception e) {
e.printStackTrace();
log.error( "--------------------The url String is:" + url + "-------------------------------" );
return 1 ;
//表示操作失败
}
finally {
if ( null != st)
{
try {
st.close();
}
catch (Exception e)
{
e.printStackTrace();
}
st = null ;
}
if (conn != null ) {
try {
conn.close();
}
catch (Exception e) {
e.printStackTrace();
}
conn = null ;
}
}
return 0 ;
//表示操作成功
}
}
|
1
2
3
4
5
6
7
8
|
< filter >
< filter-name >ObserveFilter</ filter-name >
< filter-class >com.qwserv.itm.pfl.log.svr.ObserveFilter</ filter-class >
</ filter >
< filter-mapping >
< filter-name >ObserveFilter</ filter-name >
< url-pattern >/*</ url-pattern >
</ filter-mapping >
|
五.Filter防止用户访问一些未被授权的资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
package com.drp.util.filter;
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 AuthFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
//1,doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
HttpServletRequest request = (HttpServletRequest)servletRequest;
//;//如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中无法得到的方法,就要把此request对象构造成HttpServletRequest
HttpServletResponse response = (HttpServletResponse)servletResponse。
String currentURL = request.getRequestURI();
//取得根目录所对应的绝对路径:
String targetURL = currentURL.substring(currentURL.indexOf( "/" , 1 ), currentURL.length());
//截取到当前文件名用于比较
HttpSession session = request.getSession( false );
if (! "/login.jsp" .equals(targetURL)) {
//判断当前页是否是重定向以后的登录页面页面,如果是就不做session的判断,防止出现死循环
if (session == null || session.getAttribute( "user" ) == null ) {
//*用户登录以后需手动添加session
System.out.println( "request.getContextPath()=" + request.getContextPath());
response.sendRedirect(request.getContextPath() + "/login.jsp" );
//如果session为空表示用户没有登录就重定向到login.jsp页面
return ;
}
}
//加入filter链继续向下执行
filterChain.doFilter(request, response);
//.调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作为它的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
|
html
1
2
3
4
5
6
7
8
|
< filter >
< filter-name >AuthFilter</ filter-name >
< filter-class >com.drp.util.filter.AuthFilter</ filter-class >
</ filter >
< filter-mapping >
< filter-name >AuthFilter</ filter-name >
< url-pattern >*.jsp</ url-pattern >//表示对所有jsp文件有效
</ filter-mapping >
|
总结
以上就是本文关于Java中filter用法完整代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
原文链接:https://www.cnblogs.com/go4mi/p/5509879.html