春季安全无形体登录(Spring security without form login)

2019-06-27 02:27发布

我已经实现Spring Security的表达我的应用程序春控制器:

@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";
    }
}

有了这个安全配置:

<http auto-config="true" create-session="stateless" use-expressions="true">
    <intercept-url pattern="/_ah*" access="permitAll" />
    <intercept-url pattern="/init/*" access="hasRole('ROLE_ADMIN')"/>
    <intercept-url pattern="/init*" access="hasRole('ROLE_ADMIN')"/>
</http>

当这种资源被访问时显示的默认春天登录表单( http://localhost:8888/spring_security_login ),但是我不希望这样的事情发生,而我只是想在请求头就像要插入的凭据“X-授权密钥”或任何适合的方案。

什么是这种情况的可能的解决方案?

  • 它是一个很好的,只是让X-授权密钥是在请求
  • 如果是这样,它是如何适应与Spring的安全机制,即如何,它正好与“hasRole”表达
  • 这是重要的我的Web服务是无状态的,并且每个请求通过认证
  • 最后,如何做处理春季安全,而无需处理与Spring登录表单

Answer 1:

你或许应该阅读说明在什么auto-config确实 ,然后将其删除禁用form-login 。 你的配置会更清楚,如果你专门配置要使用什么。

你想被列入什么这不是从你的问题清晰x-authorization-key头。 如果你只是一个客户端ID和共享密钥认证,那么你不妨使用基本身份验证,因为它已经支持开箱即用的,你可以再补充<http-basic />您的配置。 如果您有什么考虑更多的个性化,那么你可能要实现自定义过滤器,并把它添加到Spring Security的过滤器链来提取凭证并进行处理。

如何使你的身份验证机制适合也依赖于它实际上包含。 通常情况下你的用户将被分配身份验证时被装载,通常由某种类型的数据库角色。 该hasRole表达简单地检查当前用户是否具有指定的角色。 通常你只需要创建一个UserDetailsService它加载在其中很容易插入框架标准格式的用户信息。 这在长度别处覆盖。 如果你真的需要更多的东西定制本博客文章在GAE上的整合包括你怎么可能去一个更复杂的系统集成的详细信息。

春季安全将无法创建或使用会话 ,如果您使用create-session='stateless'

PS你并不真的需要包含在URL级别相同的安全属性都和你的控制器,它处理同一个URL上。



文章来源: Spring security without form login