我有一个运行Grails的Web应用程序,它负责查看视图和控制器,并通过服务层(Grails app using services from spring-mvc backend)调用spring-mvc后端。现在我需要为应用程序实现Spring Security(SS)。
在这一点上,我不确定如何嫁给他们。后端已经有一个功能齐全的Spring安全实现,但为了让Grails应用程序正常工作,我需要排除来自spring-mvc应用程序的所有瞬态spring安全依赖项,并使用纯Grails解决方案(也许这是错误的决定?) 。后端已经有User和Role对象,并且user_roles表通过User域中的joinTable注释建模。
问题:
我走在正确的轨道上吗?使用数据对象在SS bar中忽略java后端的所有内容,并使用带有SS插件的Grails impl?我看过帖子说我甚至不需要使用Grails插件,但它们现在已经很老了,我不确定如何注释我的控制器和服务。
如果Grails是这样的话,我不确定我需要什么来自后端以及我需要在Grails中重新实现/扩展。 我在后端应用程序中有一个SS扩展用户和UserDetailsService但不能使用它们,因为我已经完全排除了他们所依赖的所有SS罐子,所以我认为我必须自己动手?
所以我实现了一个UserDetails对象,一个自定义的UserDetailsService(这应该实现GrailsUserService吗?)并将后者公开为bean,一切都应该有效吗?可能是一厢情愿的想法。
任何指导,即使是在高层也会受到高度赞赏,因为我现在正努力确定我的方法,更不用说实施了。
答案 0 :(得分:0)
我已经设法实现了我需要的工作。我已经使用了纯粹的Grails方法,因此拥有自己的userDetails实现,其实例由我的自定义userDetailsService返回。 如果得到一个概念验证工作,那么要注意的一件事是确保您以您存储的格式读回密码.Spring Sec将对您的密码进行哈希处理,以便与数据库中的内容进行比较。因此,如果将密码存储为纯文本,则无法成功加载用户。解决此问题的一种方法是在resources.groovy中使用以下配置。
passwordEncoder(PlaintextPasswordEncoder)
但是,从安全的角度来看,我当然不会主张这是长期解决方案。