• Startseite
  • Über mich
  • Portfolio
    • Eventmanagement
    • Technologie
      • Multitouch-Surface
      • Multitouch-Table
    • Smartphone-Apps
    • Unternehmen
    • Presse
  • Programmierung
  • Auto
  • Wirtschaftsinformatik

Patrick Hütter

Mein Blog rund um Softwareentwicklung, Online-Marketing, StartUps, Gründung, Unternehmertum, Trends and more

Grails: User Authentifizierung / Login via E-Mail und Username mit Spring Security Core

0
  • by Patrick Hütter
  • in Allgemein · Code-Snippets · Programmierung · Web
  • — 7 Sep, 2012

Wer Spring-Security-Core in seiner Grails WebApp für die Authentifizierung und den Login nutzt weiß, dass man sich in der standardmäßigen Variante nur via Username einloggen kann. Wer für seine WebApp aber lieber eine E-Mail Authentifizierung oder beides (E-Mail und Username) haben möchte, dem sei folgendes ans Herz gelegt.

1. E-Mail Attribut dem Usermodel (Domain Model) hinzufügen. Das kann bei euch der die normale User.groovy Klasse sein, oder auch die entsprechenden Usermodels, die von User erben.

String email

Zusätzlich kann man einen Constraint für E-Mail Validation (ist im Grails Framework enthalten) anlegen (User.groovy):

email blank: false, email: true

2. GrailsUserDetailsService Interface implementieren: CustomUserDetailsService.groovy
Im services Ordner implementiert man nun GrailsUserDetailsService und ändert den dynamic finder in der loadByUsername(String username) Methode zu User.findByUsernameOrEmail(username, username) ab.


package com.encircle360.secretProject.customAuth

import org.codehaus.groovy.grails.plugins.springsecurity.GrailsUser
import org.codehaus.groovy.grails.plugins.springsecurity.GrailsUserDetailsService
import org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils
import org.springframework.security.core.authority.GrantedAuthorityImpl
import org.springframework.security.core.userdetails.UserDetails
import org.springframework.security.core.userdetails.UsernameNotFoundException
import com.encircle360.secretProject.security.User

class CustomUserDetailsService implements GrailsUserDetailsService {

static final List NO_ROLES = [
 new GrantedAuthorityImpl(SpringSecurityUtils.NO_ROLE)
 ]

UserDetails loadUserByUsername(String username, boolean loadRoles) throws UsernameNotFoundException {
 return loadUserByUsername(username)
 }

UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

User.withTransaction { status ->
 User user = User.findByUsernameOrEmail(username, username)
 if (!user)
 throw new UsernameNotFoundException('User not found', username)

def authorities = user.authorities.collect {new GrantedAuthorityImpl(it.authority)}

return new GrailsUser(user.username, user.password, user.enabled, !user.accountExpired,
 !user.passwordExpired, !user.accountLocked,
 authorities ?: NO_ROLES, user.id)
 }
 }
}

Zuletzt trägt man in die conf/spring/resources.groovy die eben erstelle Bean ein.

// Place your Spring DSL code here
beans = {
	userDetailsService(com.encircle360.secretProject.customAuth.CustomUserDetailsService)
}

Jetzt die App starten oder neustarten und mit der E-Mail Adresse oder dem Username einloggen! Viel Spaß damit! 🙂

Share

Tags: custom authenticationemailGrailsloginspring securityusername

— Patrick Hütter

Patrick ist Gründer und Geschäftsführer der encircle360 GmbH. Er liebt Technologie und kennt sich sehr gut im Bereich Softwareentwicklung, u.a. auf JVM basierten Technologien wie Spring Boot, VertX, Akka, Groovy, Scala & Elasticsearch aus.

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

  • Previous story HowTo: Redmine mit Apache2 und Phusion Passenger unter Debian Squeeze installieren
  • Next story E-Mail Notifications/Benachrichtigungen bei einem GIT Push mit gitolite und einem post-receive hook Skript
  • Du suchst richtig gute Beratung im Bereich Software & IT?

    encircle360
  • Neueste Beiträge

    • Running headscale with headscale-admin (UI), letsencrypt & docker-compose in dual stack with IPv4 and IPv6
    • Groovy & Grails suchen einen neuen Hauptsponsor
    • Unitymedia DNS Probleme und Lösungsmöglichkeiten für Mac OS X, Windows und den eigenen Router
    • Running Grails applications on the Raspberry Pi
    • [HowTo] Build groovy project and package as jar (with all dependencies) for easy distribution with gradle
  • Neueste Kommentare

    • nototok bei Running headscale with headscale-admin (UI), letsencrypt & docker-compose in dual stack with IPv4 and IPv6
    • Muiz bei Running headscale with headscale-admin (UI), letsencrypt & docker-compose in dual stack with IPv4 and IPv6
    • John Tucker bei Running headscale with headscale-admin (UI), letsencrypt & docker-compose in dual stack with IPv4 and IPv6
    • Bastlerwastl bei HowTo: Squid Proxy Server unter Debian schnell eingerichtet
    • PatrickHuetter bei So geht’s: Macbook mit zwei externen Monitoren verbinden
  • Kategorien

    • Allgemein
    • Android
    • Code-Snippets
    • Datenbanken
    • Elektrotechnik
    • Licht
    • Linux
    • Mac
    • Messe
    • Online-Marketing
    • Programmierung
    • Projektmanagement
    • SEM
    • SEO
    • Server
    • Shell
    • Social Media
    • Web
  • Weiterführende Links

    • Price API
    • encircle360
    • sellytics
  • Impressum
  • Datenschutz

© Patrick Hütter