Skip to content
This repository was archived by the owner on Nov 20, 2021. It is now read-only.

Spring Security Login

PINGUET Julien edited this page Feb 5, 2015 · 2 revisions

Spring Security: Login

Config

Login page

<http auto-config="true" use-expressions="true">
	<form-login login-page="/login.xhtml"
		authentication-failure-url="/login.xhtml?error" />
</http>

Options du tag <form-login> :

  • login-page : page d'authentification (défaut : /spring_security_login générée par Spring)
  • login-processing-url : URL effectuant le processus d'authentification (défaut : /j_spring_security_check)
  • default-target-url : URL après succès de l'authentification (défaut : racine)
  • authentication-failure-url : URL après échec de l'authentification (défaut : /spring_security_login?login_error)
  • username-parameter : ID du champ username (défaut : j_username)
  • password-parameter : ID du champ password (défaut : j_password)

Manager/Provider

<authentication-manager>
	<authentication-provider>
		<jdbc-user-service data-source-ref="dataSource"
			users-by-username-query="
			    select login, password, 'true'
			    from user
			    where login = ?"
			authorities-by-username-query="
			    select login, profiles_rights.right
				from user
				inner join users_profiles on user.login = users_profiles.user
				inner join profile on users_profiles.profile = profile.id
				inner join profiles_rights on profile.id = profiles_rights.profile
				where login = ?" />
	</authentication-provider>
</authentication-manager>

Options du tag jdbc-user-service :

  • data-source-ref : Bean vers la source de données
  • users-by-username-query : Requète SQL qui répètre les 3 informations d'un utilisateur (username, password et enabled), en prennant en paramètre le username
  • authorities-by-username-query : Requète SQL qui répète les rôles d'un utilisateur (username, authority), en prennant en paramètre le username

Utilisation

HTML pure

<form action="j_spring_security_check" method="post">
	<input id="j_username" />
	<input id="j_password" />
	<input value="Login" type="submit" />
</form>

  • j_spring_security_check : valeur du paramètre login-processing-url
  • j_username : valeur du paramètre username-parameter
  • j_password : valeur du paramètre password-parameter

JSF

On ne peut pas définir l'URL cible (tag form ou button).

xHTML :

<h:form prependId="false">
	<p:inputText id="j_username" value="#{loginManagedBean.username}" />
	<p:inputText id="j_password" value="#{loginManagedBean.password}" />
	<p:commandButton ajax="false" action="#{loginManagedBean.login}" type="submit" value="Sumbit" />
</h:form>

Managed Bean :

@ManagedBean
@ViewScoped
public final class LoginManagedBean {
    // ...
	
	public void login() 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();
	}
}

Pour autoriser la redirection, ajouter <dispatcher>FORWARD</dispatcher> au filtre springSecurityFilterChain dans le fichier web.xml :

<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>
</filter-mapping>

Clone this wiki locally