您的位置:首页 > 其它

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

2016-03-28 23:46 465 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: