[分享]filter用户登录过滤_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2361 | 回复: 1   主题: [分享]filter用户登录过滤        下一篇 
    本主题由 koei 于 2014-5-2 16:22:05 移动
lengyuLee
注册用户
等级:少校
经验:1118
发帖:83
精华:5
注册:2013-3-7
状态:离线
发送短消息息给lengyuLee 加好友    发送短消息息给lengyuLee 发消息
发表于: IP:您无权察看 2013-3-13 14:47:18 | [全部帖] [楼主帖] 楼主

这几天做的项目中一直纠结判断用户是否登录的问题,心想:如果在每个页面中都添加用户是否登录判断,这样的话要加载的代码太多,而且也容易出错!那能加过

滤器嘛……?该怎么加呢……纠结了很久,最后过滤器些好了,但又是死循环。最后在各种修改后还是成功了!下面是我在这次项目中用到的判断是否登录的过滤器

的代码,希望能帮到大家:

import java.io.IOException;
import java.io.PrintWriter;
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;
import com.ph.entil.Users;
public class LoginFilter implements Filter {
      public LoginFilter() {
            // TODO Auto-generated constructor stub
      }
      public void destroy() {
            // TODO Auto-generated method stub
      }
      public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest req=(HttpServletRequest) request;
            HttpServletResponse res=(HttpServletResponse) response;
            //获得请求的URL
            String url=req.getRequestURL().toString();
            //获得session中的对象
            HttpSession session= req.getSession();
            Users user=(Users) session.getAttribute("user");
            //使用endsWith()判断url结尾的字符串
            if(url.endsWith("login.jsp") || user!=null || url.endsWith("number1.jsp") || url.endsWith(".css") ||
            url.endsWith(".js")|| url.endsWith(".gif")|| url.endsWith(".png")|| url.endsWith(".jpg")||url.endsWith("SSH_market/")){
                  //满足条件就继续执行
                  chain.doFilter(request, response);
            }else{
            //不满足条件就跳转到其他页面
            PrintWriter out=res.getWriter();
            out.print("<script language>alert('请登录!…………');top.location.href='login.jsp'</script>");
            res.sendRedirect(req.getContextPath() + "/login.jsp");
      }
}
public void init(FilterConfig fConfig) throws ServletException {
}
}


web.xml配置文件:

<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.ph.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


该贴由koei转至本版2014-5-2 16:22:05



赞(0)    操作        顶端 
lengyuLee
注册用户
等级:少校
经验:1118
发帖:83
精华:5
注册:2013-3-7
状态:离线
发送短消息息给lengyuLee 加好友    发送短消息息给lengyuLee 发消息
发表于: IP:您无权察看 2013-3-13 15:06:24 | [全部帖] [楼主帖] 2  楼

使用filter实现的功能太多了——首先,filter过滤分两种——路径匹配和扩展名匹配。
通过路径匹配实现request,response的编码过滤从而防止乱码;
通过路径匹配实现访问权限的过滤;
通过扩展名匹配实现某一个,某一类文件的过滤;
甚至struts2也是使用了filter过滤.action或者.do的请求;

此处,这个问题的原理其实很简单。
如果有个user文件夹需要登录才可以访问,那么这个符合路径过滤,所以先要在web.xml中配置该过滤器,并且配置处理该过滤器的类,假设为UserFilter
web.xml中配置如下

<filter>
<filter-name>UserFilter</filter-name>
<filter-class>com.filter.UserFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UserFilter</filter-name>
<url-pattern>/user/*</url-pattern>
</filter-mapping>


如此,进入user文件夹内的所有请求都会被过滤,处理程序是com.filter.UserFilter
处理程序中要判断授权访问还是决绝访问。

public class UserFilter implements Filter{
      //实现了filter接口就需要实现doFilter方法
      public void doFilter(Request req,Response res,FilterChain filter){
            //验证是否已经登录,session中有木有用户的信息
            if(req.getSession().getAttribute("user")!=null){
                  filter.doFilter();//如果有下一个过滤器跳转到下一个,没有跳到指定页面
            }else{//否则的话,跳到登陆页面去
            req.getSession().setAttribute("error","请先登录");
            response.sendRedirect(req.getContextPath()+"/login.jsp");
      }
}
}


这就是最简单的一个用户登录验证小例子。
仅供参考



赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论