在我的logon.xhtml中,我有以下代码涉及我的支持bean,以通过spring security执行correspopnding登录。
<h:commandButton type="submit" id="login" value="Login"
action="#{logonController.doLogin}" />
我的支持bean定义如下。
@Component
@ManagedBean(name="logonController")
@SessionScoped
public class LogonController
{
. . .
public String doLogin() throws ServletException, IOException {
ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
RequestDispatcher dispatcher = ((ServletRequest) context.getRequest())
.getRequestDispatcher("/j_spring_security_check");
dispatcher.forward((ServletRequest) context.getRequest(),
(ServletResponse) context.getResponse());
FacesContext.getCurrentInstance().responseComplete();
logger.debug("in LogonPageController ");
return null;
}
}
为了将spring与JSF集成,我还在faces-config.xml中添加了以下内容。
<application>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>
此外,web.xml中还包含两个标准的spring监听器
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
我在mojarra + tomcat中尝试了上面的设置,当用户点击登录按钮时,它应该能够触发我的支持bean的logon()函数。但是,当我用MyFaces与TomEE交换时,这将无效。我的pom.xml中有以下maven依赖项。
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
<version>${myfaces-version}</version>
</dependency>
<dependency>
<groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-impl</artifactId>
<version>${myfaces-version}</version>
</dependency>
为了让它与MyFaces一起使用,我需要添加任何东西吗? 谢谢你的帮助。