我有一個Grails 2.5應用程序,我試圖使用Spring Security的核心插件(3.2.0.M1)使用的SiteMinder的預認證安裝升級到3.3。在我的UserDetailsService我得到的會話是這樣的:如何使用Grails 3在UserDetailsService中獲取會話?
UserDetails loadUserByUsername(String userId, boolean loadRoles) throws UsernameNotFoundException, DataAccessException {
org.grails.web.util.WebUtils.retrieveGrailsWebRequest().getCurrentRequest().getSession()
我需要比傳遞到應用程序中的單頭越來越運行時,本地可正常工作的應用程序,但通過戰爭中運行時,在WebLogic 12.2 。1,我得到這個錯誤:
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.
我也曾嘗試:
((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
但跑進上調用getRequest一個NPE()。當使用Spring Sec Core插件2.0-RC6在Grails 2.5中運行時,RequestContextHolder方式正常工作。也許有不同的方式來抓住標題?或者是否有可能從我以前的Config.groovy文件中將某些屬性拖入application.groovy可能導致了問題?
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集成測試案例 - 失敗 - 無線裝請求發現的還有用於自動裝配在application.yml一個新的配置,其可能的原因 – Vahid
未結束工作;還是同樣的錯誤 – user779643