首页 文章

如何使用Spring Security 3检索UserDetails?

提问于
浏览
0
www.someurl.com - public access not intercepted by Spring Security 3.
www.someurl.com/admin  - intercepted by Spring Security 3. Works fine.

我登录www.someurl.com/admin下的页面 . 然后我在同一个窗口选项卡中将网址更改为www.someurl.com . 我在同一个http会话中工作,所以我希望能够检索用户登录详细信息 .

公共URL请求由专用控制器处理 . 在这个控制器中,我有一个有线用户服务 . 此服务的实现者正在尝试检索凭据但不能 - 身份验证对象为空 .

Authentication a=SecurityContextHolder.getContext().getAuthentication();
userDetails=(UserDetails) a.getPrincipal();

=== UPDATE =========================

当我检查公共URL请求控制器中的HttpSession时,我看到了这个属性:

{SPRING_SECURITY_CONTEXT=org.springframework.security.core.context.SecurityContextImpl@ed20eaf7:身份验证:org.springframework.security.authentication.UsernamePasswordAuthenticationToken@ed20eaf7:校长:org.springframework.security.core.userdetails.User@586034f:用户名:admin ;密码保护];启用:true; AccountNonExpired:true; credentialsNonExpired:true; AccountNonLocked:true;授权机构:管理员,作者,编辑,读者;证书:[保护];认证:真实;详细信息:org.springframework.security.web.authentication.WebAuthenticationDetails@380f4:RemoteIpAddress:127.0.0.1; SessionId:43A582157C5813018632ACDD7499CF7D;授权机构:ADMINISTRATOR,AUTHOR,EDITOR,READER}

1 回答

  • 1

    如果您想获得类似的安全性详细信息,Spring Security必须拦截该URL,否则将不会有任何安全信息 . 您可以将以下内容添加到spring安全配置中:

    <security:http pattern="/" security='none' />
    

    这意味着Spring安全性会让每个人看到根URL(无论是否登录),但Spring安全性将处理该url,这意味着您的控制器对根URL将能够从 SecurityContextHolder 获取当前用户登录详细信息

相关问题