没有表单登录的Spring安全性
我在我的应用程序Spring控制器中实现了Spring Security Expression:
@Controller @RequestMapping("init") public class InitController { @PreAuthorize("hasRole('ROLE_ADMIN')") @RequestMapping(value = "/", method = RequestMethod.GET) public @ResponseBody String home(){ return "This is the init page"; } }
使用此安全配置:
访问此资源时,将显示默认的Spring登录表单( http://localhost:8888/spring_security_login
)但是我不希望这种情况发生,我只想将凭据插入请求标头中“x-authorization-key”或适用于该场景的任何内容。
这有什么可能的解决方案?
- 让x-authorization-key在请求中是一件好事
- 如果是这样,它如何适应Spring安全机制,就是它如何适应“hasRole”表达式
- 重要的是我的Web服务是无状态的,并且每个请求都经过身份validation
- 最后,如何处理Spring安全性而无需处理Spring登录表单
头
您应该阅读有关auto-config
的说明,然后将其删除以禁用form-login
。 如果您专门配置要使用的内容,则配置将更加清晰。
从您的问题中不清楚您希望将哪些内容包含在x-authorization-key
标头中。 如果您只是使用客户端ID和共享密钥进行身份validation,那么您也可以使用基本身份validation,因为它已经开箱即用,您只需将
到您的配置中即可。 如果您有更多自定义的内容,那么您可能必须实现自定义filter并将其添加到Spring Securityfilter链中以提取凭据并处理它们。
您的身份validation机制如何适合也取决于它实际包含的内容。 通常,您的用户将分配在进行身份validation时加载的角色,通常来自某种类型的数据库。 hasRole
表达式只检查当前用户是否具有指定的角色。 通常,您只需要创建一个UserDetailsService
,它以标准格式加载您的用户信息,该格式很容易插入到框架中。 这在其他地方详细介绍。 如果你真的需要更多自定义的东西, 这篇关于GAE集成的博客文章包含了如何与更复杂的系统集成的细节。
如果您使用create-session='stateless'
Spring Security将不会创建或使用会话 。
PS您实际上不需要在URL级别和处理相同URL的控制器上包含相同的安全属性。