2017-09-15 44 views
0

我有一個Grails 2.5應用程序,我試圖使用Spring Security的核心插件(3.2.0.M1)使用的SiteMinder的預認證安裝升級到3.3。在我的UserDetailsS​​ervice我得到的會話是這樣的:如何使用Grails 3在UserDetailsS​​ervice中獲取會話?

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'] 
+0

https://stackoverflow.com/questions/43250539/grails-no-thread-bound-request-found https://stackoverflow.com/questions/31221247/grails3 -controller集成測試案例 - 失敗 - 無線裝請求發現的還有用於自動裝配在application.yml一個新的配置,其可能的原因 – Vahid

+0

未結束工作;還是同樣的錯誤 – user779643

回答

0

我不知道是否有在獲得的UserDetailsS​​ervice屆任何差別,但我得到我的會議:

session["task"]=object 

你可以閱讀更多有關會議就在這裏: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

會話對象不是自動訪問從服務,或通過我的Spring bean至少不會在一個UserDetailsS​​ervice有線 – user779643

+0

請檢查我的更新。其實我在「show.gsp」的頁面上捕捉了我的會話。這是我的代碼,希望它可以幫助你 – Trainee

+0

正在訪問在一個Grails'controller'會話實例,但會議不會自動提供給服務。 – saw303

相關問題