过滤器是什么玩意?
所谓过滤器,其实就是一个服务端组件,用来截取用户端的请求与响应信息。
过滤器的应用场景:
1.对用户请求进行统一认证,保证不会出现用户账户安全性问题
2.编码转换,可在服务端的过滤器中设置统一的编码格式,避免出现乱码
3.对用户发送的数据进行过滤替换
4.转换图像格式
5.对响应的内容进行压缩
其中,第1,2场景经常涉及。
login.jsp
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
|
<%@ page language= "java" import = "java.util.*" contenttype= "text/html; charset=utf-8" %>
<%
string path = request.getcontextpath();
string basepath = request.getscheme()+ "://" +request.getservername()+ ":" +request.getserverport()+path+ "/" ;
%>
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" >
<html>
<head>
<base href= "<%=basepath%>" >
<title>my jsp 'login.jsp' starting page</title>
<meta http-equiv= "pragma" content= "no-cache" >
<meta http-equiv= "cache-control" content= "no-cache" >
<meta http-equiv= "expires" content= "0" >
<meta http-equiv= "keywords" content= "keyword1,keyword2,keyword3" >
<meta http-equiv= "description" content= "this is my page" >
<!--
<link rel= "stylesheet" type= "text/css" href= "styles.css" >
-->
</head>
<body>
<form action= "<%=path %>/servlet/loginservlet" method= "post" >
用户名:<input type= "text" name= "username" />
密码:<input type= "password" name= "password" />
<input type= "submit" value= "登录" />
</form>
</body>
</html>
|
success.jsp
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
|
<%@ page language= "java" import = "java.util.*" pageencoding= "utf-8" contenttype= "text/html; charset=utf-8" %>
<%
string path = request.getcontextpath();
string basepath = request.getscheme()+ "://" +request.getservername()+ ":" +request.getserverport()+path+ "/" ;
%>
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" >
<html>
<head>
<base href= "<%=basepath%>" >
<title>my jsp 'index.jsp' starting page</title>
<meta http-equiv= "pragma" content= "no-cache" >
<meta http-equiv= "cache-control" content= "no-cache" >
<meta http-equiv= "expires" content= "0" >
<meta http-equiv= "keywords" content= "keyword1,keyword2,keyword3" >
<meta http-equiv= "description" content= "this is my page" >
<!--
<link rel= "stylesheet" type= "text/css" href= "styles.css" >
-->
</head>
<body>
</body>
</html>
|
failure.jsp
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
|
<%@ page language= "java" import = "java.util.*" contenttype= "text/html; charset=utf-8" %>
<%
string path = request.getcontextpath();
string basepath = request.getscheme()+ "://" +request.getservername()+ ":" +request.getserverport()+path+ "/" ;
%>
<!doctype html public "-//w3c//dtd html 4.01 transitional//en" >
<html>
<head>
<base href= "<%=basepath%>" >
<title>my jsp 'login.jsp' starting page</title>
<meta http-equiv= "pragma" content= "no-cache" >
<meta http-equiv= "cache-control" content= "no-cache" >
<meta http-equiv= "expires" content= "0" >
<meta http-equiv= "keywords" content= "keyword1,keyword2,keyword3" >
<meta http-equiv= "description" content= "this is my page" >
<!--
<link rel= "stylesheet" type= "text/css" href= "styles.css" >
-->
</head>
<body>
登录失败,请检查用户名或密码!
</body>
</html>
|
loginfilter.java
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
|
package com.cityhuntshou.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 loginfilter implements filter {
private filterconfig config;
public void destroy() {
}
public void dofilter(servletrequest arg0, servletresponse arg1,
filterchain arg2) throws ioexception, servletexception {
httpservletrequest request = (httpservletrequest) arg0;
httpservletresponse response = (httpservletresponse) arg1;
httpsession session = request.getsession();
//过滤器实际应用场景之二-----编码转换
string charset = config.getinitparameter( "charset" );
if (charset == null )
{
charset = "utf-8" ;
}
request.setcharacterencoding(charset);
string nologinpaths = config.getinitparameter( "nologinpaths" );
if (nologinpaths != null )
{
string[] strarray = nologinpaths.split( ";" );
for ( int i = 0 ; i < strarray.length; i++)
{
//空元素,放行
if (strarray[i] == null || "" .equals(strarray[i]))
continue ;
if (request.getrequesturi().indexof(strarray[i]) != - 1 )
{
arg2.dofilter(arg0, arg1);
return ;
}
}
}
if (request.getrequesturi().indexof( "login.jsp" ) != - 1
|| request.getrequesturi().indexof( "loginservlet" ) != - 1 )
{
arg2.dofilter(arg0, arg1);
return ;
}
if (session.getattribute( "username" ) != null )
{
arg2.dofilter(arg0, arg1);
}
else
{
response.sendredirect( "login.jsp" );
}
}
public void init(filterconfig arg0) throws servletexception {
config = arg0;
}
}
|
loginservlet.java
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
|
package com.cityhuntshou.servlet;
import java.io.ioexception;
import java.io.printwriter;
import javax.servlet.servletexception;
import javax.servlet.http.httpservlet;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
import javax.servlet.http.httpsession;
public class loginservlet extends httpservlet {
/**
* constructor of the object.
*/
public loginservlet() {
super ();
}
/**
* destruction of the servlet. <br>
*/
public void destroy() {
super .destroy(); // just puts "destroy" string in log
// put your code here
}
/**
* the doget method of the servlet. <br>
*
* this method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws servletexception if an error occurred
* @throws ioexception if an error occurred
*/
public void doget(httpservletrequest request, httpservletresponse response)
throws servletexception, ioexception {
}
/**
* the dopost method of the servlet. <br>
*
* this method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws servletexception if an error occurred
* @throws ioexception if an error occurred
*/
public void dopost(httpservletrequest request, httpservletresponse response)
throws servletexception, ioexception {
string username = request.getparameter( "username" );
string password = request.getparameter( "password" );
//new string(username.getbytes("iso-8859-1"),"utf-8")
system.out.println(username);
if ( "admin" .equals(username) && "admin" .equals(password))
{
//校验通过
httpsession session = request.getsession();
session.setattribute( "username" , username);
response.sendredirect(request.getcontextpath()+ "/success.jsp" );
}
else
{
//校验失败
response.sendredirect(request.getcontextpath()+ "/failure.jsp" );
}
}
/**
* initialization of the servlet. <br>
*
* @throws servletexception if an error occurs
*/
public void init() throws servletexception {
// put your code here
}
}
|
web.xml
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
|
<?xml version= "1.0" encoding= "utf-8" ?>
<web-app version= "2.5"
xmlns= "http://java.sun.com/xml/ns/javaee"
xmlns:xsi= "http://www.w3.org/2001/xmlschema-instance"
xsi:schemalocation="http: //java.sun.com/xml/ns/javaee
http: //java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<servlet>
<description> this is the description of my j2ee component</description>
<display-name> this is the display name of my j2ee component</display-name>
<servlet-name>loginservlet</servlet-name>
<servlet- class >com.cityhuntshou.servlet.loginservlet</servlet- class >
</servlet>
<servlet-mapping>
<servlet-name>loginservlet</servlet-name>
<url-pattern>/servlet/loginservlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>loginfilter</filter-name>
<filter- class >com.cityhuntshou.filter.loginfilter</filter- class >
<init-param>
<param-name>nologinpaths</param-name>
<param-value>login.jsp;failure.jsp;loginservlet</param-value>
</init-param>
<init-param>
<param-name>charset</param-name>
<param-value>utf- 8 </param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>loginfilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
|
运行效果:
访问结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.cnblogs.com/cityhuntshou/p/7443688.html