Configurazione base di Spring Security 3

In questo articolo riporto una configurazione base di Spring Security 3, il framework di Spring per l’autenticazione e l’autorizzazione degli utenti.
In questo esempio è configurato un solo utente che quando cerca di accedere a index.html è prima reindirizzato alla pagina standard di login per l’autenticazione.
In questo progetto sono anche utilizzati e configurati log4j e maven.

  1. crea il progetto SpringSecurity
  2. crea il file pom.xml

    Nella sezione “properties” sono specificate le versioni delle dipendenze scaricate com maven; nei commenti è specificato quale dipendenze si stanno utilizzando: la prima parte riguarda Spring Framework, seguita da Log4j per la gestione dei log, Spring Security per l’autenticazione e l’autorizzazione degli utenti, jstl o java standard tag library per utilizzare il tag “c” (per esempio <c:if>) e spring security tag per usare il tag “sec” (per esempio <sec:authorize>);
    in alternativa a maven puoi copiare i seguenti file .jar nella directory WEB-INF/lib

    • spring-core-3.1.1.RELEASE.jar
    • spring-asm-3.1.1.RELEASE.jar
    • commons-logging-1.1.1.jar
    • spring-expression-3.1.1.RELEASE.jar
    • spring-beans-3.1.1.RELEASE.jar
    • spring-aop-3.1.1.RELEASE.jar
    • aopalliance-1.0.jar
    • spring-context-3.1.1.RELEASE.jar
    • spring-context-support-3.1.1.RELEASE.jar
    • spring-tx-3.1.1.RELEASE.jar
    • spring-jdbc-3.1.1.RELEASE.jar
    • spring-orm-3.1.1.RELEASE.jar
    • spring-oxm-3.1.1.RELEASE.jar
    • commons-lang-2.5.jar
    • spring-web-3.1.1.RELEASE.jar
    • spring-webmvc-3.1.1.RELEASE.jar
    • spring-webmvc-portlet-3.1.1.RELEASE.jar
    • spring-test-3.1.1.RELEASE.jar
    • log4j-1.2.17.jar
    • spring-security-core-3.1.1.RELEASE.jar
    • spring-security-web-3.1.1.RELEASE.jar
    • spring-security-config-3.1.1.RELEASE.jar
    • jstl-1.2.jar
    • spring-security-taglibs-3.1.1.RELEASE.jar
    • spring-security-acl-3.1.1.RELEASE.jar
  3. crea il file WEB-INF/web.xml

    In particolare puoi notare il riferimento a /WEB-INF/spring-security.xml e le sezioni “filter” e “filter-mapping” per la configurazione di Spring Security
  4. crea il file WEB-INF/SpringSecurity-servlet.xml
  5. crea il file WEB-INF/log4j.xml
  6. crea il file WEB-INF/spring-security.xml

    Qui definisco un utente di nome “user” e password “spring”
    La password è stata criptata utilizzando Scala
    Riporto la procedura per ottenere la password criptata:

    • scarica spring-security-core-*.jar (ad esempio spring-security-core-3.1.1.RELEASE.jar) contenuto nell’ultima release di Spring Security
    • installa Scala
    • apri una console e digita:

      dove [your path] è il percorso a spring-security-core-3.1.1.RELEASE .jar
      (la risposta dovrebbe essere:
      Welcome to Scala version 2.9.1.r0-b20120114224707 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_05).
      Type in expressions to have them evaluated.
      Type :help for more information.
      )
    • digita:

      Risposta:
      encoder: org.springframework.security.crypto.password.StandardPasswordEncoder = org.springframework.security.crypto.password.StandardPasswordEncoder@448d5117
    • digita:

      Risposta:
      res0: java.lang.String = 20331ba9c4935517ab16f0052097b0d79f40f0a54a1a025ec742a308e8564757e021797bf7185332
      la sequenza di caratteri successiva a “res0: java.lang.String =” è proprio la password criptata da riportare nel file spring-security.xml
  7. crea il file WEB-INF/views/index.jsp

    Le variabili ${message} e ${username} sono valorizzate in LoginController.java; il pulsante è solo un link a /j_spring_security_logout e permette all’utente di effettuare il logout
  8. crea il file WEB-INF/classes/eu/lucazanini/springsecurity/LoginController.java
  9. lancia l’applicazione (inserisci “user” e “spring”)

Referenze:
Spring Security

6 risposte a “Configurazione base di Spring Security 3”

  1. Thanks for the tutorial!

    May I ask why not use
    encoder = new org.springframework.security.crypto.password.StandardPasswordEncoder;
    encoder.encode(“spring”);

    directly in java , but instead install scala to call the above?

    1. I need the encrypted password to put in xml file.
      This is the only reason I use Scala, but you can use a standalone java program if you want.

      1. I do see the output from scala+StandardPasswordEncoder is different from java StandardPasswordEncoder, I am confused, since when the web application runs it just needs StandardPasswordEncoder to encode the user submitted password.

        1. The encode method returns a different output every time even if you use the same password.
          See this
          A standard PasswordEncoder implementation that uses SHA-256 hashing with 1024 iterations and a random 8-byte random salt value

  2. Nice for starting, I was trying to find a simple example to understand the basic configuration. Thanks a lot!!
    Can you provide, if it is possible an example with a CAS server…….
    Thanks

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.