Hey Leute,
Ich habe Spring Security mittlerweile einige Zeit erfolgreich in Verbindung mit Spring MVC (+JSP) genutzt.
Jetzt wollte ich Spring MVC durch JSF 2.0 ersetzen, und habe damit angefangen eine Login Page zu basteln.
Es wäre ja zu schön gewesen wenn es so einfach funktioniert hätte. XD
Also zuerst habe ich einfach das Formular aus der JSP Login-Page in die JSF(xhtml) Seite kopiert, doch nach dem Abschicken des Formulars, passiert rein gar nichts.
Meine Vermutung ist, das JSF sich da nicht ganz mit stinknormalen Postanfragen verträgt, aber sicher bin ich mir nicht.
Danach habe ich ein JSF-Formular versucht, dessen Command-Button ein Backing Bean aufruft, das an /j_spring_security_check weiterleiten sollte.
Beim abschicken kommt nur eine "Resource not available Fehlermeldung" und man ist nach wie vor nicht autentifiziert.
Wenn ich der SpringSecurityFilterChain folgendes mitgebe: <dispatcher>FORWARD</dispatcher>, kann ich zwar händisch zur Login-Page navigieren und mich anmelden, jedoch werden KEINE Resourcen gesichert. Ich kann jede URL ansteuern.
Ohne Autentifizierung sind dann halt Nutzerspezifische Daten nicht sichtabar, wie zb. Username, etc.
web.xml
security.xml
start.xhtml
LoginBean
Ich habe schon jedes mögliche Tutuorial durchgeackert, aber nichts scheint zu helfen.
Ich möchte nur das die URLs sicher sind und die Login Page funktioniert.
Wie soll ich da herangehen.
An JSF herumschrauben? An Spring herumschrauben?
Hatte jemand von euch schon mal dieses Problem bei einer Custom JSF Login Page?
LG
Tarantoga
Ich habe Spring Security mittlerweile einige Zeit erfolgreich in Verbindung mit Spring MVC (+JSP) genutzt.
Jetzt wollte ich Spring MVC durch JSF 2.0 ersetzen, und habe damit angefangen eine Login Page zu basteln.
Es wäre ja zu schön gewesen wenn es so einfach funktioniert hätte. XD
Also zuerst habe ich einfach das Formular aus der JSP Login-Page in die JSF(xhtml) Seite kopiert, doch nach dem Abschicken des Formulars, passiert rein gar nichts.
Meine Vermutung ist, das JSF sich da nicht ganz mit stinknormalen Postanfragen verträgt, aber sicher bin ich mir nicht.
Danach habe ich ein JSF-Formular versucht, dessen Command-Button ein Backing Bean aufruft, das an /j_spring_security_check weiterleiten sollte.
Beim abschicken kommt nur eine "Resource not available Fehlermeldung" und man ist nach wie vor nicht autentifiziert.
Wenn ich der SpringSecurityFilterChain folgendes mitgebe: <dispatcher>FORWARD</dispatcher>, kann ich zwar händisch zur Login-Page navigieren und mich anmelden, jedoch werden KEINE Resourcen gesichert. Ich kann jede URL ansteuern.
Ohne Autentifizierung sind dann halt Nutzerspezifische Daten nicht sichtabar, wie zb. Username, etc.
web.xml
Code:
<?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>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml
/WEB-INF/security.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.htm</url-pattern>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<!-- Just here so the JSF implementation can initialize, *not* used at runtime -->
<servlet>
<servlet-name>Faces_Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Just here so the JSF implementation can initialize -->
<servlet-mapping>
<servlet-name>Faces_Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- Serves static resource content from .jar files such as spring-faces.jar-->
<servlet>
<servlet-name>Resource_Servlet</servlet-name>
<servlet-class>org.springframework.js.resource.ResourceServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<!-- Map all /resources requests to the Resource Servlet for handling -->
<servlet-mapping>
<servlet-name>Resource_Servlet</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<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>
</filter-mapping>
<welcome-file-list>
<welcome-file>profile.faces</welcome-file>
</welcome-file-list>
</web-app>
security.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/security"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<http auto-config="true" use-expressions="true" >
<intercept-url pattern="/start.do" access="permitAll"/>
<intercept-url pattern="/*" access="hasRole('ROLE_USER')"/>
<form-login login-processing-url="/j_spring_security_check"
login-page="/start.do" default-target-url="/profile.faces" />
</http>
<authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"
authorities-by-username-query="select username,authority from users where username=?"/>
</authentication-provider>
</authentication-manager>
</beans:beans>
start.xhtml
HTML:
<h:form id="loginForm" prependId="false">
<label for="j_username" class="formLabel">Username or Email</label>
<h:inputText id="j_username" size="20" maxlength="50" required="true"/>
<label for="j_password" class="formLabel">Password</label>
<h:inputSecret id="j_password" size="20" maxlength="50"/>
<div class="submit">
<h:commandButton action="#{loginBean.login}" type="submit" value="Sign In" id="signin_submit"/>
<h:selectBooleanCheckbox id="_spring_security_remember_me"/>
<label for="_spring_security_remember_me" id="labelInline">Remember Me</label>
</div>
<div class="forgot">
<a href="" class="link_bottom">Forgot Password?</a>
<a href="" class="link_bottom">Forgot Username?</a>
</div>
</h:form>
LoginBean
Code:
@ManagedBean
public class LoginBean {
public String login() throws IOException{
FacesContext.getCurrentInstance().getExternalContext().dispatch("j_spring_security_check");
FacesContext.getCurrentInstance().responseComplete();
return null;
}
}
Ich habe schon jedes mögliche Tutuorial durchgeackert, aber nichts scheint zu helfen.
Ich möchte nur das die URLs sicher sind und die Login Page funktioniert.
Wie soll ich da herangehen.
An JSF herumschrauben? An Spring herumschrauben?
Hatte jemand von euch schon mal dieses Problem bei einer Custom JSF Login Page?
LG
Tarantoga