请教acegi的 SecurityContextHolder.getContext();取值为空的问题
在使用acegi时,登录取得登录用户信息时取得的值为null
public TUser getUser() { //取得登录用户 SecurityContext ctx = SecurityContextHolder.getContext(); Authentication auth = ctx.getAuthentication(); if(auth.getPrincipal() instanceof UserDetails) { user = (TUser)auth.getPrincipal(); //log.debug("\nauth.getPrincipal()==============\n"+user.getUserid()); } return user; }java.lang.NullPointerExceptioncom.firedragon.struts.base.action.BaseDispatchAction.getUser(BaseDispatchAction.java:125)
可是从DEBUG的信息来看
[2007-01-17 23:51:32]DEBUG org.springframework.web.context.support.XmlWebApplicationContext(line:215) -Publishing event in context [Root WebApplicationContext]: org.acegisecurity.event.authentication.AuthenticationSuccessEvent[source=org.acegisecurity.providers.UsernamePasswordAuthenticationToken@aaf3d2: Username: com.firedragon.hibernate.model.TUser@ba2b6b[用户名:=admin, enabled:=true, accountExpired:=true, credentialsExpired:=true, accountLocked:=true,受权角色: ,ROLE_11]; Password: [PROTECTED]; Authenticated: true; Details: org.acegisecurity.ui.WebAuthenticationDetails@16d8a64: RemoteIpAddress: 127.0.0.1; SessionId: 8AECD601C138A1E87458F770333028E8; Granted Authorities: ROLE_11][2007-01-17 23:51:32]WARN org.acegisecurity.event.authentication.LoggerListener(line:60) -Authentication event AuthenticationSuccessEvent: admin; details: org.acegisecurity.ui.WebAuthenticationDetails@16d8a64: RemoteIpAddress: 127.0.0.1; SessionId: 8AECD601C138A1E87458F770333028E8[2007-01-17 23:51:32]DEBUG org.acegisecurity.ui.AbstractProcessingFilter(line:392) -Authentication success: org.acegisecurity.providers.UsernamePasswordAuthenticationToken@aaf3d2: Username: com.firedragon.hibernate.model.TUser@ba2b6b[用户名:=admin, enabled:=true, accountExpired:=true, credentialsExpired:=true, accountLocked:=true,受权角色: ,ROLE_11]; Password: [PROTECTED]; Authenticated: true; Details: org.acegisecurity.ui.WebAuthenticationDetails@16d8a64: RemoteIpAddress: 127.0.0.1; SessionId: 8AECD601C138A1E87458F770333028E8; Granted Authorities: ROLE_11[2007-01-17 23:51:32]DEBUG org.acegisecurity.ui.AbstractProcessingFilter(line:398) -Updated SecurityContextHolder to contain the following Authentication: 'org.acegisecurity.providers.UsernamePasswordAuthenticationToken@aaf3d2: Username: com.firedragon.hibernate.model.TUser@ba2b6b[用户名:=admin, enabled:=true, accountExpired:=true, credentialsExpired:=true, accountLocked:=true,受权角色: ,ROLE_11]; Password: [PROTECTED]; Authenticated: true; Details: org.acegisecurity.ui.WebAuthenticationDetails@16d8a64: RemoteIpAddress: 127.0.0.1; SessionId: 8AECD601C138A1E87458F770333028E8; Granted Authorities: ROLE_11'[2007-01-17 23:51:32]DEBUG org.acegisecurity.ui.AbstractProcessingFilter(line:416) -Redirecting to target URL from HTTP Session (or default): /News/main.html[2007-01-17 23:51:32]DEBUG org.springframework.web.context.support.XmlWebApplicationContext(line:215) -Publishing event in context [Root WebApplicationContext]: org.acegisecurity.event.authentication.InteractiveAuthenticationSuccessEvent[source=org.acegisecurity.providers.UsernamePasswordAuthenticationToken@aaf3d2: Username: com.firedragon.hibernate.model.TUser@ba2b6b[用户名:=admin, enabled:=true, accountExpired:=true, credentialsExpired:=true, accountLocked:=true,受权角色: ,ROLE_11]; Password: [PROTECTED]; Authenticated: true; Details: org.acegisecurity.ui.WebAuthenticationDetails@16d8a64: RemoteIpAddress: 127.0.0.1; SessionId: 8AECD601C138A1E87458F770333028E8; Granted Authorities: ROLE_11][2007-01-17 23:51:32]WARN org.acegisecurity.event.authentication.LoggerListener(line:60) -Authentication event InteractiveAuthenticationSuccessEvent: admin; details: org.acegisecurity.ui.WebAuthenticationDetails@16d8a64: RemoteIpAddress: 127.0.0.1; SessionId: 8AECD601C138A1E87458F770333028E8[2007-01-17 23:51:32]DEBUG org.acegisecurity.context.HttpSessionContextIntegrationFilter(line:276)[color=red]--------SecurityContext stored to HttpSession------[/color]: 'org.acegisecurity.context.SecurityContextImpl@aaf3d2: Authentication: org.acegisecurity.providers.UsernamePasswordAuthenticationToken@aaf3d2: Username: com.firedragon.hibernate.model.TUser@ba2b6b[用户名:=admin, enabled:=true, accountExpired:=true, credentialsExpired:=true, accountLocked:=true,受权角色: ,ROLE_11]; Password: [PROTECTED]; Authenticated: true; Details: org.acegisecurity.ui.WebAuthenticationDetails@16d8a64: RemoteIpAddress: 127.0.0.1; SessionId: 8AECD601C138A1E87458F770333028E8; Granted Authorities: ROLE_11'[2007-01-17 23:51:32]DEBUG org.acegisecurity.context.HttpSessionContextIntegrationFilter(line:285) [color=red]-------SecurityContextHolder set to new context-----[/color], as request processing completed
-------SecurityContext stored to HttpSession------
------SecurityContextHolder set to new context----
上面这里应该把用户信息放到session里去了,请教什么地方出来问题可能导致取不到值?
1 楼 firedragon 2007-01-20 问题的解决办法 2 楼 wutao8818 2007-01-28 (User) ctx.getAuthentication().getPrincipal(); 3 楼 jamesby 2007-01-29 我不是很了解,能把配置文件贴出来?然后把你的认证的代码也贴出来 4 楼 wshert1688 2007-04-03 大哥这个问题也困扰了我一天,不过今天解决啦
大家都挺难的
http://wiki.springside.org.cn/display/springside/Chapter+2.+Technical+Overview
你现看看这个文章
HttpSessionContextIntegrationFilter在HTTP之间存储SecurityContext
加上HttpSessionContextIntegrationFilter这个就行啦,在Filter链条上