了解Spring Security中的allowAll()和Anonymous()的区别

时间:2018-07-18 07:21:44

标签: java spring security

我只是想确保我正确地获得了这个信息,因此,我将感谢您的任何答复;在我的configure-override中:

# app/config/config.yml
framework:
    # ...
    assets:
        json_manifest_path: '%kernel.root_dir%/../web/build/manifest.json'

permitAll()允许任何请求,同时:

@Override
protected void configure(HttpSecurity http) throws Exception
{
    http.
        [...]
        permitAll()
        [...]
}

将仅授予不是但是登录的用户访问权限 在这两种情况下,默认情况下都会创建 HttpSession -Object。

对吗?

1 个答案:

答案 0 :(得分:4)

从春季开始documentation

  

通常,采用“默认拒绝”的做法被认为是一种良好的安全做法,在该方法中,您明确指定允许的内容并禁止其他所有内容。定义未经身份验证的用户可以访问的内容的情况与此类似,尤其是对于Web应用程序。许多站点要求用户必须通过身份验证才能使用少数几个URL(例如,主页和登录页面)。在这种情况下,最简单的是为这些特定的URL定义访问配置属性,而不是为每个受保护的资源定义访问配置属性。换句话说,有时很高兴地说默认情况下需要ROLE_SOMETHING,并且只允许该规则的某些例外,例如应用程序的登录,注销和主页。您也可以从过滤器链中完全忽略这些页面,从而绕过访问控制检查,但是由于其他原因,这可能是不可取的,特别是如果这些页面对经过身份验证的用户的行为有所不同。

     

这就是我们所说的匿名身份验证。

  

请注意,“匿名身份验证”的用户与未经身份验证的用户之间没有真正的概念差异。 Spring Security的匿名身份验证只是为您提供了一种更便捷的方式来配置访问控制属性。

使用.permitAll()将配置授权,以便在该特定路径上允许所有请求(来自匿名用户和登录用户)。

.anonymous()表达式主要是指用户的状态(是否登录)。 基本上,直到用户被“认证”为止,它就是“匿名用户”。就像每个人都有一个“默认角色”。