web-dev-qa-db-fra.com

À la recherche d'un exemple de sécurité Simple Spring

Je suis nouveau sur Spring-Security (Java) et je cherche un bon et simple exemple de: 

  1. Comment utiliser la sécurité de printemps pour la connexion et la déconnexion

  2. Assurez-vous que la session existe sur chaque page et, si ce n’est pas le cas, redirigez-la à nouveau à la connexion.

  3. Comment avoir accès à la session utilisateur en cours?

Mon projet fonctionne actuellement avec Spring MVC et hibernate.
J'ai construit le loginAPI + loginDAO, il me faut maintenant combiner la sécurité et sécuriser certaines pages.

J'ai cherché des tutoriels, mais beaucoup d'entre eux sont très compliqués.

21
MushMushon

Eh bien ... c'est ce que je pense de loin le meilleur que j'ai vu jusqu'à présent!
http://krams915.blogspot.com/2010/12/spring-security-mvc-integration_18.html

16
fatnjazzy

Vous pouvez rechercher une implémentation Single Sign-On (par exemple, CAS) dans Spring Security. Ça va servir votre but complètement.

Check-out :-

http://static.springsource.org/spring-security/site/docs/3.0.x/reference/cas.html

https://wiki.jasig.org/display/CASC/Using+the+CAS+Client+3.1+with+Spring+Security

5
Abhishek De

C'est aussi un excellent exemple:

http://www.mkyong.com/spring-security/spring-security-form-login-example/http://krams915.blogspot.pt/2010/12/spring-security -3-mvc-using-simple-user.html

Les deux sont bien documentés et sont faciles à modifier pour votre proposition. Krams parle de LDAP avec Spring Security.

3
Filipe Cabaco

Tutoriel de sécurité de printemps par MKyong

comment effectuer l'authentification de la base de données (à l'aide de XML et d'annotations) dans Spring Security.

Technologies utilisées:

Printemps 3.2.8.LELEASE
Spring Security 3.2.3.LELELE
Spring JDBC 3.2.3.LELEASE
Eclipse 4.2
JDK 1.6
Maven 3
Tomcat 6 ou 7 (Servlet 3.x)
MySQL Server 5.6 

SecurityConfig.Java 

package com.mkyong.config;

import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    DataSource dataSource;

    @Autowired
    public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {

      auth.jdbcAuthentication().dataSource(dataSource)
        .usersByUsernameQuery(
            "select username,password, enabled from users where username=?")
        .authoritiesByUsernameQuery(
            "select username, role from user_roles where username=?");
    }   

    @Override
    protected void configure(HttpSecurity http) throws Exception {

      http.authorizeRequests()
        .antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
        .and()
          .formLogin().loginPage("/login").failureUrl("/login?error")
          .usernameParameter("username").passwordParameter("password")
        .and()
          .logout().logoutSuccessUrl("/login?logout")
        .and()
          .exceptionHandling().accessDeniedPage("/403")
        .and()
          .csrf();
    }
}

Spring-security.xml

<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-3.0.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-3.2.xsd">

    <!-- enable use-expressions -->
    <http auto-config="true" use-expressions="true">

        <intercept-url pattern="/admin**" access="hasRole('ROLE_ADMIN')" />

        <!-- access denied page -->
        <access-denied-handler error-page="/403" />

        <form-login 
            login-page="/login" 
            default-target-url="/welcome" 
            authentication-failure-url="/login?error" 
            username-parameter="username"
            password-parameter="password" />
        <logout logout-success-url="/login?logout"  />
        <!-- enable csrf protection -->
        <csrf/>
    </http>

    <!-- Select users and user_roles from database -->
    <authentication-manager>
      <authentication-provider>
        <jdbc-user-service data-source-ref="dataSource"
          users-by-username-query=
            "select username,password, enabled from users where username=?"
          authorities-by-username-query=
            "select username, role from user_roles where username =?  " />
      </authentication-provider>
    </authentication-manager>

</beans:beans>
  • Dans la félicitation ci-dessus, le /admin et ses sous-dossiers sont tous protégés par un mot de passe.
  • login-page=”/login” - La page pour afficher le formulaire de connexion personnalisé
  • authentication-failure-url=”/login?error” - Si l'authentification échoue, transférer à la page /login?error
  • logout-success-url=”/login?logout” - Si la déconnexion réussit, transférez-la pour afficher /logout
  • username-parameter=”username” - Nom de la demande contenant le «nom d'utilisateur». En HTML, c'est le nom du texte saisi.
  • <csrf/> - Activer la protection CSRF (Cross Site Request Forgery)
1
Premraj

Si vous n'avez pas encore regardé cette vidéo du développeur principal de Spring Security . En fait, il est référencé sur le site Spring Security, mais il est facile de le rater. Bien que je sois d’accord, bon Printemps Les exemples de sécurité sont difficiles à trouver. 

1
Andrew White