2017-09-15 3 views
0

Ich habe eine Grails 2.5-Anwendung, die ich mit dem Spring Security Core-Plugin (3.2.0.M1) auf das Upgrade auf 3.3 mit der preauth Setup mit Siteminder versuchen. In meinem UserDetailsService erhalte ich die Session wie folgt aus:Wie bekomme ich Session in UserDetailsService mit Grails 3?

UserDetails loadUserByUsername(String userId, boolean loadRoles) throws UsernameNotFoundException, DataAccessException { 
    org.grails.web.util.WebUtils.retrieveGrailsWebRequest().getCurrentRequest().getSession() 

ich mehr als die einzelnen Header in die App übergeben bekommen müssen und wenn die App läuft lokal funktioniert dies wie erwartet, aber wenn sie durch einen Krieg läuft, auf WebLogic 12.2 0,1, bekomme ich diesen Fehler:

No thread-bound request found: Are you referring to request attributes outside of an 
actual web request, or processing a request outside of the originally receiving thread? 
If you are actually operating within a web request and still receive this message, your code 
is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use 
RequestContextListener or RequestContextFilter to expose the current request. 

ich auch versucht:

((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); 

aber lief in eine NPE auf getRequest(). Beim Ausführen in Grails 2.5 mit dem Spring Sec Core-Plugin 2.0-RC6 hat der RequestContextHolder-Weg richtig funktioniert. Gibt es eine andere Möglichkeit, die Header zu greifen? Oder ist es möglich, dass eine Eigenschaft, die ich aus meiner vorherigen Datei Config.groovy in application.groovy übernommen habe, ein Problem verursacht haben könnte?

resources.groovy:

beans = { 

userDetailsService(com.myapp.security.MyUserDetailsService) 

userDetailsServiceWrapper(org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper) { 
     userDetailsService = ref('userDetailsService') 
} 

preauthAuthProvider(org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider) { 
     preAuthenticatedUserDetailsService = ref('userDetailsServiceWrapper') 
} 

requestHeaderAuthenticationFilter(org.springframework.security.web.authentication.preauth.RequestHeaderAuthenticationFilter){ 
    principalRequestHeader='smauthid' 
    checkForPrincipalChanges = false 
    invalidateSessionOnPrincipalChange = false 
    continueFilterChainOnUnsuccessfulAuthentication = true 
    authenticationManager = ref('authenticationManager') 
} 

} 

Bootstrap.groovy

SpringSecurityUtils.clientRegisterFilter('requestHeaderAuthenticationFilter', SecurityFilterPosition.PRE_AUTH_FILTER) 

application.groovy

grails.plugin.springsecurity.filterChain.chainMap = [ 
     [pattern: '/assets/**',  filters: 'none'], 
     [pattern: '/**/js/**',  filters: 'none'], 
     [pattern: '/**/css/**',  filters: 'none'], 
     [pattern: '/**/images/**', filters: 'none'], 
     [pattern: '/**/favicon.ico', filters: 'none'], 
     [pattern: '/index/nouser', filters: 'none'], 
     [pattern: '/nouser',   filters: 'none'], 
     [pattern: '/**',    filters: 'JOINED_FILTERS'] 
    ] 
    grails.plugin.springsecurity.providerNames = ['preauthAuthProvider'] 
+0

https://stackoverflow.com/questions/43250539/grails-no-thread-bound-request-found https://stackoverflow.com/questions/31221247/grails3 -controller-integration-test-case-fail-no-thread-gebunden-anfrage-found Es gibt auch eine neue config für autoWired in der application.yml, die vielleicht die ursache – Vahid

+0

hat, die nicht funktionierte; immer noch der gleiche Fehler – user779643

Antwort

0

Ich bin nicht sicher, ob es einen Unterschied in immer Session in UserDetailsService aber Ich bekomme meine Sitzung von:

session["task"]=object 

Sie können mehr über Sitzung hier lesen: Grails 3 latest Session documentation.

EDIT 1

def show(Project project) { 
     respond project 
     def object = project //params of the Task "task" 
     session["task"]=object 
} 
+1

Das Session-Objekt ist nicht automatisch von einem Service aus erreichbar, oder zumindest nicht in der UserDetailsService verdrahtet durch meine Spring-Bohnen – user779643

+0

Bitte überprüfen Sie mein Update. Eigentlich nehme ich meine Session auf der Seite von "show.gsp" auf. Das ist mein Code, hoffe es hilft – Trainee

+0

Sie greifen auf die Sitzung Instanz in einem Grails 'Controller', aber die Sitzung ist nicht automatisch für einen Dienst verfügbar. – saw303

Verwandte Themen