Filter实现登陆权限的过滤实例
Fileter简介:
Filter 主要是实现拦截客户端到达servlet到页面请求,并且能够修改请求(HttpServletRequest)的头和数据。
(实现登陆的登陆判断,以及相关权限的判断)
Filter还可以实现在HttpServletResponse到达客户端的拦截,可以检查修改(HttpServletResponse)的头和数据
1、Filter实现类
public class DoLogin implements Filter{
//获取配置参数信息
private FilterConfig config;
//初始化
public void init(FilterConfig config)
{
this.config=config;
}
//实现销毁
public void destroy()
{
this.config=null;
}
//实现doFilter方法
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
throws IOException,ServletException
{
//获取Filter的配置参数
String encoding=config.getInitParameter("encoding");
String loginPage=config.getInitParameter("LoginPage");
String proPage=config.getInitParameter("ProPage");
//设置编码集
request.setCharacterEncoding(encoding);
//把强求转化为HttpServletRequest
HttpServletRequest hreq=(HttpServletRequest)request;
//获取登录信息
HttpSession session=hreq.getSession(true);
//获取请求页面
String hreqPath=hreq.getServletPath();
//判断页面信息,登录user有信息,登录页面时login.jsp或者是prologin.jsp
if(session.getAttribute("user")==null
&&!hreqPath.endsWith(loginPage)
&&!hreqPath.endsWith(proPage))
{
//跳转到登录页面
request.setAttribute("tip", "你还没有登录");
request.getRequestDispatcher(loginPage).forward(request, response);
}
else
{
//放行
chain.doFilter(request, response);
}
}
}
2、配置web.xml
<filter>
<filter-name>dologin</filter-name>
<filter-class>lee.DoLogin</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
<init-param>
<param-name>LoginPage</param-name>
<param-value>/login.jsp</param-value>
</init-param>
<init-param>
<param-name>ProPage</param-name>
<param-value>/proLogin.jsp</param-value>
</init-param>
</filter>
<!-- 拦截URL-->
<filter-mapping>
<filter-name>dologin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3、在web容器中创建3个页面login.jsp ;prologin.jsp;other.jsp
4、最终结果展示:登陆系统以后可以任意查看其它页面,而没有登陆时,查看其它页面将会被拦截返回登陆页,并给出提示信息。