- 有哪些优势获得本金如春控制器参数
Principal principal
,然后把它传递给服务层之上,虽然SecurityContextHolder.getContext().getAuthentication().getPrincipal()
在服务层立即获得本金? - 什么是在没有检查
getAuthentication()
和getPrincipal()
对象的情况下在服务层获取主要细节的最佳方法(类似于自定义包装器)?
回答
-
- 您的服务API将更加易于使用。您将直接看到对主体的依赖关系,因此您不会在主体不存在的环境中错误地调用某种服务方法。
- 通常,对SpringSecurity代码的较少依赖意味着在迁移到新的Spring Security版本时,问题较少。
- 您将能够在Spring Security不存在的环境中重用您的服务层。
- 准备一些包装类(例如AuthenticationService)。将getPrincipal()方法添加到它。实施你的支票。将AuthenticationService直接调用到SecurityContextHolder的任何地方。
如果我需要为特定用户获取一些数据,我认为在服务层获得一个主体(例如用户名)更安全,因为此(限制)和数据库之间的层数较少。所以这是唯一的道,而不是在控制器中获得委托人(其间的附加服务层)。但另一方面,正如你所说的,服务层可以更加可重用。你对此有何看法? – Alex 2013-02-13 00:32:53
主要对象由web层保存并保留。所以对我来说,委托人从控制器到服务层看起来很自然。还有一点是静态依赖对单元测试不利:http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/。我没有看到任何安全问题,因为一个pincipal实例是不可变的(通常密码在这个时候将从实际实现中被擦除)。不好意思推迟了。我很长时间是AFK。 – 2013-02-27 18:08:40
在扩展BaseService(服务层)中使用您的选项2是否安全? – Alex 2013-03-07 12:40:19
- 1. 使用javascript从总计认证Web服务获得安全上下文令牌
- 2. 我可以通过spring安全性获得多个安全上下文吗?
- 3. 从Spring MVC控制器的安全上下文获取UserDetails对象
- 4. 如何在jsp中获得spring安全角色层次结构?
- 5. Spring安全注解在服务层上不起作用
- 6. Spring Web:通过Spring服务从服务中下载文件
- 7. 无法从Spring-Jersey中检索安全上下文
- 8. Spring MVC上传,生成并下载文件的安全方式
- 9. 在没有HttpServletRequest的Spring服务中获取上下文url
- 10. 带有全局上下文上下文的Spring MVC Annotations:component-scan?
- 11. Spring安全上下文和@Repository bean
- 12. Spring安全子线程上下文
- 13. Spring-mvc和Ajax jquery:无法从服务器获得响应
- 14. Spring 3 MVC +安全
- 15. 如何通过安全层访问grails中的web服务
- 16. 用弹簧安全提取服务层中登录的用户
- 17. 服务器主体Xuser无法在当前安全上下文中访问数据库Ydb。 SQL服务器2008
- 18. 如何在wcf restfull服务中获得安全性?
- 19. 从安全服务器获取图像
- 20. 使用spring获取服务层 - 好主意?
- 21. 将安全层添加到OData服务
- 22. 无法获得注册到文本安全服务器工作
- 23. 如何在安全的情况下制作spring-boot REST服务?
- 24. Spring安全记忆服务会话Cookie
- 25. 服务层中的主数据验证
- 26. Spring MVC单线程安全?
- 27. 在相同的上下文中的Spring REST服务和JAX WS服务
- 28. 从大量的上下文到主要上下文的绘制
- 29. WebApplication中REST Web服务的Spring/Acegi安全性?
- 30. Spring MVC安全从REST获取用户数据
你可能会找到[这个问题]的答案(http://stackoverflow.com/questions/248562/when-using-spring-security-what-is-the-proper-way-to-obtain- current-username-i)有用。 [这个答案](http://stackoverflow.com/questions/8764545/best-practice-for-getting-active-users-userdetails/8765597#8765597)也可能有用。 – 2013-02-13 14:13:34
这是一个很好的解决方案,让抽象类与静态方法,我可以把'SecurityContextHolder.getContext()。getAuthentication()。getPrincipal()'?之后,我可以在服务层中使用它。 – Alex 2013-02-14 00:40:24
阅读我给你的第二个链接。没有什么可以阻止你在你的服务中使用这种方法,并且如果你使用一个接口,你也可以将它交换出来进行测试。 – 2013-02-14 01:59:29