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']
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
hat, die nicht funktionierte; immer noch der gleiche Fehler – user779643