当前位置: 代码迷 >> J2EE >> session 为空写入有关问题,自己写了一个过滤器获取session为空时写入处理
  详细解决方案

session 为空写入有关问题,自己写了一个过滤器获取session为空时写入处理

热度:24   发布时间:2016-04-22 01:52:21.0
session 为空写入问题,自己写了一个过滤器获取session为空时写入处理
Java code
    public void doFilter(ServletRequest servletRequest,            ServletResponse servletResponse, FilterChain filterChain)            throws IOException, ServletException {        /**         * 1,doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括         * 表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过         * 滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。         */        HttpServletRequest request = (HttpServletRequest) servletRequest;        /**         * 如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中         * 无法得到的方法,就要把此request对象构造成HttpServletRequest         */        HttpServletResponse response = (HttpServletResponse) servletResponse;        HttpSession session = request.getSession(false);        String currentURL = request.getRequestURI(); // 取得根目录所对应的绝对路径:        System.out.println(currentURL);        Iterator<Resources> iter = securityResourcesService                .getSystemResources().iterator();        if(session!=null){            if(currentURL.indexOf("Login")<0&&currentURL.indexOf("validateCode")<0){                [color=#FF0000]session.setAttribute(Procedure.URL_BLACK, currentURL);[/color]            }        }        while (iter.hasNext()) {            Resources source = iter.next();            // 路径格式 /onionPortal/adver/            if (Pattern.matches(source.getUrl() + "\\S*\\s*", currentURL)) {                System.out.println("拦截认证请求成功!");                                if (session == null || session.getAttribute("user") == null) {                    System.out.println("----sessionKey:"+Procedure.LAST_LOGIN_IP_SESSION_KEY);                    [color=#FF0000]session.setAttribute(Procedure.LAST_LOGIN_IP_SESSION_KEY,getIpAddrByRequest(request));[/color]                    // *用户登录以后需手动添加session                    System.out.println("request.getContextPath()="                            + request.getContextPath());                    response.sendRedirect(request.getContextPath()                            + "/userLogin/middlePage.html");                    return;                } else {                    Usertable users = (Usertable) session.getAttribute("user");                    Iterator<Role> sourceRole = source.getRole().iterator();                    re:                    while (sourceRole.hasNext()) {                        Role role = sourceRole.next();                        Iterator<Role> usrRoleiter = users.getRoles()                                .iterator();                        while (usrRoleiter.hasNext()) {                            if (role.getId() == usrRoleiter.next().getId()) {//如果匹配上则跳出循环                                break re;                            }                        }                        //跳到登录页面                        response.sendRedirect(request.getContextPath()+ "/userLogin/middlePage.html");                    }                }            }            break;        }        // 加入filter链继续向下执行        filterChain.doFilter(request, response);        /**         * 调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作 为它         * 的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另         * 一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。         */    }


这里是写的过滤方法!但是如果session为空时怎么写不进去session啊!我需要将用户登录ip写进去红色部分为报错代码
session.setAttribute(Procedure.URL_BLACK, currentURL);
session.setAttribute(Procedure.LAST_LOGIN_IP_SESSION_KEY,getIpAddrByRequest(request));
下面是报错代码


2012-3-31 22:31:17 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet default threw exception
java.lang.NullPointerException
at com.onionportal.filter.SecurityFilter.doFilter(SecurityFilter.java:70)
  相关解决方案