首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring安全程序授权

Spring安全程序授权
EN

Stack Overflow用户
提问于 2016-12-05 18:13:39
回答 1查看 676关注 0票数 0

我通过一个ApplicationRunner将管理/测试用户添加到基于Security / JPA的Spring应用程序中。

在此之前,我有一个data.sql文件,但是我需要支持几个数据库,所以我正在寻找一个可移植的解决方案。

我为用户创建了一个Spring数据JPA存储库,并简单地添加了如下所示的用户:

代码语言:javascript
运行
复制
@Component
public class MyRunner implements ApplicationRunner {
private UserRepository userRepository;

@Autowired
public MyRunner(UserRepository userRepository) {
  this.userRepository = userRepository;
}

/* (non-Javadoc)
 * @see org.springframework.boot.ApplicationRunner#run(org.springframework.boot.ApplicationArguments)
 */
@Override
public void run(ApplicationArguments args) throws Exception {
    User admin = new User("admin", "admin", Roles.ROLE_ADMIN);
    userRepository.saveAndFlush(admin);
}

}

效果很好。但是,我激活了Spring全局方法安全性,以保护UserRepository,它也通过REST公开:

代码语言:javascript
运行
复制
@PreAuthorize("hasRole('ROLE_ADMIN')")
@Override
<S extends User> S save(S user);

但是添加用户失败了,因为我没有被授权。我试过这个黑客:

代码语言:javascript
运行
复制
@Override
public void run(ApplicationArguments args) throws Exception {
    User admin = new User("admin", "admin", Roles.ROLE_ADMIN);
    Authentication auth = new UsernamePasswordAuthenticationToken(admin, null,
      AuthorityUtils.createAuthorityList("ROLE_ADMIN"));
    SecurityContextHolder.getContext().setAuthentication(auth);
    userRepository.saveAndFlush(admin);

    SecurityContextHolder.clearContext();
}

用户会被添加,但是web应用程序本身的身份验证现在已经彻底失效.

我只得到AuthenticationCredentialsNotFoundException

代码语言:javascript
运行
复制
o.s.b.a.audit.listener.AuditListener     : AuditEvent [timestamp=Mon Dec 05 19:12:10 CET 2016, principal=<unknown>, type=AUTHENTICATION_FAILURE, data={type=org.springframework.security.authentication.AuthenticationCredentialsNotFoundException, message=An Authentication object was not found in the SecurityContext}]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-06 10:30:15

我只是在用一种方法:

我已经禁用了方法安全性,我只需将所有Spring数据端点放在/ Data /-前缀路由后面。然后,我可以使用Security和所有不同的修改HTTP方法(POST、PUT、修补程序、DELETE)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40980678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档