2016-05-09 3 views
0

Ich kann keine Größenbeschränkung für Kennwörter festlegen, das Festlegen der Mindestgröße verursacht kein Problem (da das verschlüsselte Kennwort sehr lang ist), aber die maximale Größe führt dazu, dass die Anwendung mit dem folgenden Stapel fehlschlägt
(wenn ich versuche, ein Benutzer mit einem gültigen Passwort in init/Bootstrap) (Personne in meiner app genannt):Wie wird die Passwortgrößenbeschränkung festgelegt, wenn ein Federsicherheitskern in Grails verwendet wird?

ERROR org.springframework.boot.SpringApplication - Application startup failed 
java.lang.NullPointerException: null 
    at org.hibernate.engine.spi.BatchFetchQueue.removeBatchLoadableEntityKey(BatchFetchQueue.java:163) 
    at org.hibernate.engine.internal.StatefulPersistenceContext.addEntity(StatefulPersistenceContext.java:389) 
    at org.hibernate.engine.internal.StatefulPersistenceContext.addEntity(StatefulPersistenceContext.java:462) 
    at org.hibernate.action.internal.AbstractEntityInsertAction.makeEntityManaged(AbstractEntityInsertAction.java:143) 
    at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:203) 
    at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:181) 
    at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:216) 
    at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:334) 
    at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:289) 
    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:195) 
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:209) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:194) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114) 
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 
    at org.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor.onSaveOrUpdate(ClosureEventTriggeringInterceptor.java:105) 
    at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:684) 
    at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:676) 
    at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:671) 
    at org.grails.orm.hibernate.AbstractHibernateGormInstanceApi$_performSave_closure3.doCall(AbstractHibernateGormInstanceApi.groovy:235) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426) 
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) 
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) 
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294) 
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1021) 
    at groovy.lang.Closure.call(Closure.java:426) 
    at org.codehaus.groovy.runtime.ConvertedClosure.invokeCustom(ConvertedClosure.java:54) 
    at org.codehaus.groovy.runtime.ConversionHandler.invoke(ConversionHandler.java:124) 
    at com.sun.proxy.$Proxy95.doInHibernate(Unknown Source) 
    at org.grails.orm.hibernate.GrailsHibernateTemplate.doExecute(GrailsHibernateTemplate.java:196) 
    at org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:140) 
    at org.grails.orm.hibernate.GrailsHibernateTemplate.execute(GrailsHibernateTemplate.java:110) 
    at org.grails.orm.hibernate.AbstractHibernateGormInstanceApi.performSave(AbstractHibernateGormInstanceApi.groovy:234) 
    at org.grails.orm.hibernate.AbstractHibernateGormInstanceApi.save(AbstractHibernateGormInstanceApi.groovy:154) 
    at org.grails.datastore.gorm.GormEntity$Trait$Helper.save(GormEntity.groovy:140) 
    at org.grails.datastore.gorm.GormEntity$Trait$Helper$save$3.call(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133) 
    at ma.ac.uir.ecine.authentification.Personne.save(Personne.groovy) 
    at ma.ac.uir.ecine.authentification.Personne.save(Personne.groovy) 
    at org.grails.datastore.gorm.GormEntity$save$0.call(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) 
    at BootStrap$_closure1.doCall(BootStrap.groovy:13) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1426) 
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) 
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) 
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294) 
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1021) 
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1086) 
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1021) 
    at groovy.lang.Closure.call(Closure.java:426) 
    at groovy.lang.Closure.call(Closure.java:420) 
    at grails.util.Environment.evaluateEnvironmentSpecificBlock(Environment.java:437) 
    at grails.util.Environment.executeForEnvironment(Environment.java:430) 
    at grails.util.Environment.executeForCurrentEnvironment(Environment.java:406) 
    at org.grails.web.servlet.boostrap.DefaultGrailsBootstrapClass.callInit(DefaultGrailsBootstrapClass.java:62) 
    at org.grails.web.servlet.context.GrailsConfigUtils.executeGrailsBootstraps(GrailsConfigUtils.java:65) 
    at org.grails.plugins.web.servlet.context.BootStrapClassRunner.onStartup(BootStrapClassRunner.groovy:53) 
    at grails.boot.config.GrailsApplicationPostProcessor.onApplicationEvent(GrailsApplicationPostProcessor.groovy:240) 
    at grails.boot.config.GrailsApplicationPostProcessor.onApplicationEvent(GrailsApplicationPostProcessor.groovy) 
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:163) 
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:136) 
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:381) 
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:335) 
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:855) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:140) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) 
    at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) 
    at grails.boot.GrailsApp.run(GrailsApp.groovy:55) 
    at grails.boot.GrailsApp.run(GrailsApp.groovy:374) 
    at grails.boot.GrailsApp.run(GrailsApp.groovy:363) 
    at grails.boot.GrailsApp$run.call(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133) 
    at ecine.Application.main(Application.groovy:8) 

wie das bitte zu lösen? sollte ich die Passwortgröße manuell überprüfen? Kann ich vor dem Codieren die Passwortgröße überprüfen und eine Fehlermeldung wie bei der normalen Validierung hinzufügen? Ich verwende Federkernsicherheit

+0

yep versuchen, ein Prüfklasse Hinzufügen (während der Aktion des Controllers speichern), bevor sie es zu Ihrem Domain-Objekt gesendet werden .. also den Bootstrap im Wesentlichen dann, ohne dass die Validierung durch fliegen würde Überprüfen Sie, was völlig falsch ist. https://github.com/vahidhedayati/grails-wschat-plugin/blob/master/grails-app/controllers/grails/plugin/wschat/WsChatController.groovy#L33-L40 dann hier https://github.com/vahidhedayati /grails-wschat-plugin/blob/master/src/main/groovy/grails/plugin/wschat/beans/SignupBean.groovy#L25-L30 – Vahid

Antwort

1

Sie können einen benutzerdefinierten Validator mit Regex-Ausdrücken verwenden. Außerdem können Sie die erlaubten Zeichen begrenzen. In diesem Link können Sie Beispiele sehen: Link.

Ein Beispiel für meine Anwendung ist:

password blank: false, matches: "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=\\S+\$).{8,}\$" 

Das Passwort muss das folgende Muster haben:

  • minLength: 8 Zeichen
  • Bei mindestens ein Großbuchstabe.
  • Mindestens ein Kleinbuchstabe.
  • Mindestens eine Zahl.
  • Es ist Sonderzeichen erlaubt.

Edit:

Sie diese Situation vor Validate in Ihrem Controller überprüfen() oder hasErrors() Aktionen. Auf diese Weise überprüfen Sie das entschlüsselte Passwort.

Beispiel:

String pattern = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=\\S+\$).{8,}\$" 

def password = userInstance.password 
if (!password.matches(pattern)) { 

    flash.message = "Error in password" 
    render view:".." 
} 
+0

Wenn Sie schauen, macht er es im Bootstrap, der dann die zugrunde liegende Domain aufruft Objekt, das diese Validierung anwendet. Es wird nichts anderes verursachen als ein Problem, wo es ist. – Vahid

+0

Die erste Frage war nicht mit Bootstrap verbunden. –

Verwandte Themen