最近写的小项目,具体我就不说了,现在有点问题,希望有人帮助下
就是在用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
就是在用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
但是你的Filter没有考虑到Session里面没有存放用户名时该怎么办。
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);
这不是回到登陆页了吗?
但是问题是你是从session里面取出来的,而session里面有可能没有man这个东西,比如说你未登录直接访问页面的时候。
这个是怎么回事呢?
改为
String username=(String)(session.getAttribute("man"));
纠结了,我对这个filter实在是不懂。居然搞成这样了,有么人知道这是哪里出错了啊
我写了点看错出在哪里的,可是根本就不走那些句子
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之前还行,改了就成这样了
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>
这次更纠结了,啥都不懂了。。有人能给说下吗?