Filter --- 验证用户是否登录

Filter有一下种类:

1.用户权限

2.日志

3.负责解码

4.能改变XML内容的XSLT Filter等

5.Filter 可负责拦截多个请求/响应;一个请求/响应也可被多个Filter拦截


创建一个Filter 共有两步骤

1.Filter处理类

2.web.xml 配置Filter


定义一个Filter对用户请求进行过滤,Filter通过doFilter()设置编码字符;验证用户是否登录,如果没有登录就跳转登录页面;

自动登录 AuthorityFilter.java 代码:

@WebFilter(filterName = "authority", urlPatterns = { "/*" }, initParams = {

@WebInitParam(name = "encoding", value = "GBK"),
@WebInitParam(name = "loginPage", value = "/login.jsp"),
@WebInitParam(name = "proLogin", value = "/proLogin.jsp") })
public class AuthorityFilter implements Filter {
// FilterConfig可用于访问Filter的配置信息
private FilterConfig config;

// 实现初始化方法
public void init(FilterConfig config) {
this.config = config;
}

// 实现销毁方法
public void destroy() {
this.config = null;
}

// 执行过滤的核心方法
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 获取该Filter的配置参数
String encoding = config.getInitParameter("encoding");
String loginPage = config.getInitParameter("loginPage");
String proLogin = config.getInitParameter("proLogin");
// 设置request编码用的字符集
request.setCharacterEncoding(encoding); // ①


HttpServletRequest requ = (HttpServletRequest) request;
HttpSession session = requ.getSession(true);
// 获取客户请求的页面
String requestPath = requ.getServletPath();
// 如果session范围的user为null,即表明没有登录
// 且用户请求的既不是登录页面,也不是处理登录的页面
if (session.getAttribute("user") == null
&& !requestPath.endsWith(loginPage)
&& !requestPath.endsWith(proLogin))
{
// forward到登录页面
request.setAttribute("tip", "您还没有登录");
request.getRequestDispatcher(loginPage).forward(request, response);
}
// "放行"请求
else {
chain.doFilter(request, response);
}
}
}


配置web.xml 

 <filter>
    <filter-name>authority</filter-name>
    <filter-class>com.yd.filter.AuthorityFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>authority</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

注意:对所有的请求进行Filter


测试页面有3jsp :

1.login.jsp  代码:

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>登录页面</title>
</head>
<body>
<h2>登录页面</h2>

<form method="post" action="proLogin.jsp">
用户名:<input type="text" name="name"/><br/><span><%
if(request.getAttribute("tip") != null)
{
out.println("<font color='red'>" 
+ request.getAttribute("tip")
+ "</font>");
}
%></span>
<input type="submit" value="登录"/>
</form>
</body>
</html>

2.proLogin.jsp 代码:

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> 登录页面 </title>
</head>
<body>
<h2>登录页面</h2>
<%
session.setAttribute("user" 
, request.getParameter("name"));
%>
登录成功,可以访问该应用的其他页面
</body>
</html>

3.index.jsp 

此jsp页面随便写,只是为了测试;

总结:该用户没有登录该应用,不可以访问其他页面,只能被迫的访问 login.jsp 和proLogin.jsp 


你可能感兴趣的:(filter,过滤器)