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 下的页面。然后我在同一个窗口选项卡中将 url 更改为 www.someurl.com。我在同一个 http 会话中工作,所以我希望能够检索用户登录详细信息。

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

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

=== 更新 ==========================

当我在公共 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:用户名:管理员; 密码保护]; 启用:真;AccountNonExpired:真;凭据非过期:真;AccountNonLocked:真;授予权限:ADMINISTRATOR、AUTHOR、EDITOR、READER;凭证:[受保护];已认证:真实;详细信息:org.springframework.security.web.authentication.WebAuthenticationDetails@380f4:RemoteIpAddress:127.0.0.1;会话ID:43A582157C5813018632ACDD7499CF7D;授予权限:ADMINISTRATOR、AUTHOR、EDITOR、READER}

4

1 回答 1

1

如果你想像你一样获取安全细节,Spring Security 必须拦截 url,否则不会有任何安全信息。您可以将以下内容添加到您的 spring 安全配置中:

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

这意味着 spring security 会让每个人都看到 root url(无论是否登录),但是 spring security 会处理 url,这意味着你的控制器对 root url 将能够从中获取当前用户登录详细信息SecurityContextHolder

于 2013-01-05T18:57:58.793 回答