最近写的小项目,具体我就不说了,现在有点问题,希望有人帮助下
就是在用session和过滤器控制页面登陆权限这出了问题
由于我也是第一次做项目,session和filter都是第一次用,现在情况是,好像根本就不走filter里的内容,直接输入网址也可以登录到所有的页面
,我找了很久,不知道哪里错了  ,也许你们一眼就能看出来,还请帮小弟一把
托管bean里的代码:
public String Manager_blog() {
        if (man.getName().equals("") || man.getPassword().equals("")) {
            message = "用户名和密码均不能为空";
        } else {
            if (new BlogEjb().Manager_ejb(man)) {
                HttpSession session = null;
                session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
                session.setAttribute("man", man.getName());
                return "index_login.jsf";
            } else {
                message = "用户名或密码错误!";
            }
        }
        return "login.jsf";
    }
过滤器代码:
package com.city.filter;import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.Filter;
import javax.servlet.RequestDispatcher;
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;/**
 *
 * @author zhang
 */
public class SysLoginFilter implements Filter {    FilterConfig config;    public void init(FilterConfig filterConfig) throws ServletException {
        this.config = config;
    }    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        HttpSession session = req.getSession();
        String back = "login.jsf";
        RequestDispatcher disparcher = req.getRequestDispatcher(back);
        try {
            String username = (String) session.getAttribute("man");
            if (username.equals("")) {
                disparcher.forward(request, response);
            } else {
                chain.doFilter(request, response);
            }
        } catch (Exception e) {
            System.out.println("error=" + e.getMessage());
        }
    }    public void destroy() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
XHTM配置:
<filter>
        <filter-name>SESSION FILTER</filter-name>
        <filter-class>com.city.filter.SysLoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SESSION FILTER</filter-name>
        <url-pattern>/index/*.jsf</url-pattern>
    </filter-mapping>再说下   框架用的是JSF2.0

解决方案 »

  1.   

    走了
    但是你的Filter没有考虑到Session里面没有存放用户名时该怎么办。
      

  2.   

    String back = "login.jsf";
      RequestDispatcher disparcher = req.getRequestDispatcher(back);
      try {
      String username = (String) session.getAttribute("man");
      if (username.equals("")) {
      disparcher.forward(request, response);
      } else {
      chain.doFilter(request, response);
      }
      } catch (Exception e) {
      System.out.println("error=" + e.getMessage());
      }
      }当她为空的时候,执行的是disparcher.forward(request, response);
    而String back = "login.jsf";
      RequestDispatcher disparcher = req.getRequestDispatcher(back);
    这不是回到登陆页了吗?
      

  3.   

    如果你处理的是直接由表单提交的数据,可以用str.equal("")
    但是问题是你是从session里面取出来的,而session里面有可能没有man这个东西,比如说你未登录直接访问页面的时候。
      

  4.   

    哦,谢谢了,你说的是不是if (null==username||"".equals(username))这样,我看他们很多这样写的,但是我运行了下,报错了,说Cannot convert requst of type class java.lang.String to interface java.util.Map
    这个是怎么回事呢?
      

  5.   

    String username = (String) session.getAttribute("man");
    改为
    String username=(String)(session.getAttribute("man"));
      

  6.   

    是在IE里设置吗?我用的是IE9 是英文的,不怎么会设置
      

  7.   

    一直说Cannot convert requst of type class java.lang.String to interface java.util.Map
    纠结了,我对这个filter实在是不懂。居然搞成这样了,有么人知道这是哪里出错了啊
      

  8.   

    具体在哪一行我也不清楚啊,我一运行tomcat然后输入login.jsf就出错了
    我写了点看错出在哪里的,可是根本就不走那些句子
    Tomcat里的报错是:
    2010-12-29 14:19:53 com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
    严重: Error Rendering View[/index/login.xhtml]
    java.lang.IllegalArgumentException: Cannot convert requst of type class java.lang.String to interface java.util.Map
            at org.apache.el.lang.ELSupport.coerceToType(ELSupport.java:375)
            at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:188)
            at com.sun.faces.mgbean.BeanManager$ScopeManager$CustomScopeHandler.isInScope(BeanManager.java:664)
            at com.sun.faces.mgbean.BeanManager$ScopeManager.isInScope(BeanManager.java:464)
            at com.sun.faces.mgbean.BeanManager.isBeanInScope(BeanManager.java:236)
            at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:82)
            at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
            at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
            at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61)
            at org.apache.el.parser.AstValue.getValue(AstValue.java:107)
            at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
            at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:102)
            at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190)
            at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178)
            at javax.faces.component.UIOutput.getValue(UIOutput.java:168)
            at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
            at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:338)
            at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
            at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
            at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620)
            at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
            at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
            at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1613)
            at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
            at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
            at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:380)
            at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126)
            at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127)
            at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
            at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
            at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
            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:233)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
            at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
            at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
            at java.lang.Thread.run(Thread.java:619)
    然后页面的报错就是那一句
    Cannot convert requst of type class java.lang.String to interface java.util.Map我没改filter之前还行,改了就成这样了
      

  9.   

    我觉得我已经把它往很简单的弄了,就只弄这一个filter,都没弄其他的了,主要是我第一次接触,网上代码有点繁杂,理解的不是很清楚,所以到这来求助高手啊
      

  10.   

    悲剧再一次诞生了,开始我把web.xml配置没写,写到faces配置了,在这里给楼上的说声谢谢,但是又有新问题题,我点运行,出现
    D:\javaTest\BlogText\nbproject\build-impl.xml:588: 尚未部署该模块。
    然后我点这个东西,出来了一个xml  指向一段代码是
    <target if="netbeans.home" name="-run-deploy-nb">
            <nbdeploy clientUrlPart="${client.urlPart}" debugmode="false" forceRedeploy="${forceRedeploy}"/>
        </target>
    这次更纠结了,啥都不懂了。。有人能给说下吗?