首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

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

2012-04-04 
session 为空写入问题,自己写了一个过滤器获取session为空时写入处理Java codepublic void doFilter(Servl

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)


at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:619)


求大神解答疑问

[解决办法]
HttpSession session = request.getSession(false);
改成true看看

热点排行