小编Sco*_*ale的帖子

使用Spring Security时,获取bean中当前用户名(即SecurityContext)信息的正确方法是什么?

我有一个使用Spring Security的Spring MVC Web应用程序.我想知道当前登录用户的用户名.我正在使用下面给出的代码段.这是接受的方式吗?

我不喜欢在这个控制器中调用静态方法 - 这违背了Spring的全部目的,恕我直言.有没有办法配置应用程序以注入当前的SecurityContext或当前的身份验证?

  @RequestMapping(method = RequestMethod.GET)
  public ModelAndView showResults(final HttpServletRequest request...) {
    final String currentUser = SecurityContextHolder.getContext().getAuthentication().getName();
    ...
  }
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc spring-security

280
推荐指数
9
解决办法
17万
查看次数

使用Spring Security进行单元测试

我的公司一直在评估Spring MVC,以确定我们是否应该在下一个项目中使用它.到目前为止,我喜欢我所看到的内容,现在我正在查看Spring Security模块,以确定它是否可以/应该使用.

我们的安全要求非常基本; 用户只需提供用户名和密码即可访问网站的某些部分(例如获取有关其帐户的信息); 并且网站上有一些页面(常见问题解答,支持等),应该授予匿名用户访问权限.

在我创建的原型中,我一直在Session中为经过身份验证的用户存储"LoginCredentials"对象(其中只包含用户名和密码); 例如,某些控制器检查此对象是否在会话中以获取对登录用户名的引用.我正在寻找用Spring Security取代这个本土逻辑,这将有很好的好处,可以删除任何类型的"我们如何跟踪登录用户?" 和"我们如何验证用户?" 来自我的控制器/业务代码.

似乎Spring Security提供了一个(每个线程)"上下文"对象,可以从应用程序的任何位置访问用户名/主体信息...

Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Run Code Online (Sandbox Code Playgroud)

...在某种程度上,这个对象是一个(全局)单例,这似乎非常不像Spring.

我的问题是:如果这是在Spring Security中访问有关经过身份验证的用户的信息的标准方法,那么将Authentication对象注入SecurityContext的可接受方式是什么,以便在单元测试需要时可用于我的单元测试认证用户?

我是否需要在每个测试用例的初始化方法中进行连接?

protected void setUp() throws Exception {
    ...
    SecurityContextHolder.getContext().setAuthentication(
        new UsernamePasswordAuthenticationToken(testUser.getLogin(), testUser.getPassword()));
    ...
}
Run Code Online (Sandbox Code Playgroud)

这似乎过于冗长.有没有更简单的方法?

SecurityContextHolder物体本身似乎非常联合国春天般的...

java security spring unit-testing spring-security

131
推荐指数
6
解决办法
8万
查看次数

spring认证提供程序VS认证处理过滤器

spring认证提供程序和认证处理过滤器都需要注册authenticationManager吗?

身份验证提供程序我可以使用custom-authentication-provider标记

但是什么是不同的Spring认证提供程序和认证处理过滤器?

java spring spring-mvc spring-security

13
推荐指数
2
解决办法
5330
查看次数

Subclipse Get Contents和Get Revision之间有什么区别?

使用Eclipse-> Team-> Show History视图时,在文件修订版上使用Subclipse"Get Contents"和"Get Revision"选项有什么区别?

有什么方法可以看到Subclipse在幕后发布的svn命令是什么?

subclipse svn version-control revision eclipse-plugin

5
推荐指数
1
解决办法
3869
查看次数