Spring custom JSF login page, always "Bad credentials"
===

I'm trying to get a JSF login page to work with Spring security. I've looked around for numerous examples but none works. Every time I try to log in using the JSF page I get a "Bad credentials" warning in my server log.

Spring-Security.xml

	<?xml version="1.0" encoding="UTF-8"?>
	<beans:beans xmlns="http://www.springframework.org/schema/security"
		xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://www.springframework.org/schema/beans
		       http://www.springframework.org/schema/beans/spring-beans.xsd
		       http://www.springframework.org/schema/security
		       http://www.springframework.org/schema/security/spring-security.xsd">

		<http auto-config="true">
			<intercept-url pattern="/Login.xhtml*" access="IS_AUTHENTICATED_ANONYMOUSLY" />
			<intercept-url pattern="/**/*.css*" access="IS_AUTHENTICATED_ANONYMOUSLY" />
			<intercept-url pattern="/**/*.js*" access="IS_AUTHENTICATED_ANONYMOUSLY" />
			<intercept-url pattern="/**" access="ROLE_USER,ROLE_ADMIN" />
			<form-login login-page="/Login.xhtml" default-target-url="/Secure.xhtml"
				authentication-failure-url="/Login.xhtml" />
		</http>

		<authentication-manager>
			<authentication-provider>
				<user-service>
					<user name="admin" authorities="ROLE_ADMIN" password="admin"/>
				</user-service>
			</authentication-provider>
		</authentication-manager>
	</beans:beans>

applicationContext.xml

	<?xml version="1.0" encoding="UTF-8"?>
	<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns:tx="http://www.springframework.org/schema/tx"
		xmlns:context="http://www.springframework.org/schema/context"
		xmlns="http://www.springframework.org/schema/beans"
		xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

		<context:component-scan base-package="com.example" />
		<context:annotation-config />
		<tx:annotation-driven />
		<import resource="classpath:spring/security/Spring-Security.xml" />
	</beans>

Login.xhtml

	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
	<html xmlns="http://www.w3.org/1999/xhtml"
		xmlns:h="http://java.sun.com/jsf/html"
		xmlns:f="http://java.sun.com/jsf/core"
		xmlns:ui="http://java.sun.com/jsf/facelets">
	<h:head></h:head>
	<body>
		<h:form>
			<h:outputLabel value="username" for="j_username"
				style="float:left" />
			<h:inputText id="j_username" style="float:left" />

			<h:outputLabel value="password" for="j_password"
				style="float:left; clear:both" />
			<h:inputSecret id="j_password" style="float:left" />

			<h:commandButton value="login"
				actionListener="#{loginBean.login}" style="float:left;clear:both" />
		</h:form>
		<h:messages style="float:left;clear:both" />
	</body>
	</html>

LoginBean

	@Named
	@Scope("request")
	public class LoginBean
	{
		public void login() throws ServletException, IOException
		{
			FacesContext facesContext = FacesContext.getCurrentInstance();
			ExternalContext externalContext = facesContext.getExternalContext();
			externalContext.dispatch("/j_spring_security_check");
			facesContext.responseComplete();
		}
	}

Web.xml

	<?xml version="1.0" encoding="UTF-8"?>
	<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
		<context-param>
			<param-name>javax.faces.PROJECT_STAGE</param-name>
			<param-value>Development</param-value>
		</context-param>
		<filter>
			<filter-name>OpenEntityManagerInViewFilter</filter-name>
			<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
			<init-param>
				<param-name>singleSession</param-name>
				<param-value>true</param-value>
			</init-param>
			<init-param>
				<param-name>sessionFactoryBeanName</param-name>
				<param-value>sessionFactory</param-value>
			</init-param>
		</filter>
		<filter-mapping>
			<filter-name>OpenEntityManagerInViewFilter</filter-name>
			<url-pattern>/*</url-pattern>
		</filter-mapping>
		<filter>
			<filter-name>springSecurityFilterChain</filter-name>
			<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
		</filter>
		<filter-mapping>
			<filter-name>springSecurityFilterChain</filter-name>
			<url-pattern>/*</url-pattern>
			<dispatcher>FORWARD</dispatcher>
			<dispatcher>REQUEST</dispatcher>
		</filter-mapping>
		<listener>
			<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
		</listener>
		<listener>
			<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
		</listener>
		<servlet>
			<servlet-name>Faces Servlet</servlet-name>
			<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
			<load-on-startup>1</load-on-startup>
		</servlet>
		<servlet-mapping>
			<servlet-name>Faces Servlet</servlet-name>
			<url-pattern>*.xhtml</url-pattern>
		</servlet-mapping>
	</web-app>

When I use a non-JSF page as Login.xhtml it works flawlessly.

Page that does work:

	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
	<html xmlns="http://www.w3.org/1999/xhtml"
		xmlns:h="http://java.sun.com/jsf/html"
		xmlns:f="http://java.sun.com/jsf/core"
		xmlns:ui="http://java.sun.com/jsf/facelets">
	<h:head></h:head>
	<body>
		<form action="j_spring_security_check" method="post">
			<table>
				<tr>
					<td>User:</td>
					<td><input type="text" name="j_username" /></td>
				</tr>
				<tr>
					<td>Password:</td>
					<td><input type="password" name="j_password" /></td>
				</tr>
				<tr>
					<td colspan='2'><input name="submit" type="submit"
						value="submit" /></td>
				</tr>
			</table>
		</form>
	</body>
	</html>

Any help is appreciated.