当前位置: 首页 > news >正文

直接IP做网站网站推广的技巧

直接IP做网站,网站推广的技巧,外贸网站镜像,wordpress 多站点 主站点Anonymous Authentication Overview 通常认为采用“默认拒绝”立场是良好的安全实践,您明确指定允许的内容并拒绝其他所有内容。定义未经身份验证的用户可以访问的内容是类似的情况,特别是对于 Web 应用程序。许多网站要求用户必须经过身份验证才能访问…

Anonymous Authentication

Overview

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

这就是我们所说的匿名身份验证。请注意,一个“匿名认证”的用户和一个未认证的用户之间在概念上没有真正的区别。Spring Security 的匿名身份验证只是为您提供了一个更方便的方式来配置您的访问控制属性。对 servlet API 的调用,例如 getCallerPrincipal,仍然返回 null,即使实际上 SecurityContextHolder 中有一个匿名身份验证对象。

在其它情况下,匿名身份验证也很有用,比如当一个审计拦截器查询 SecurityContextHolder 以识别哪个主体负责某个操作时。如果类知道 SecurityContextHolder 总是包含一个 Authentication 对象,而永远不会包含 null,那么这些类可以被编写得更健壮。

Configuration

当您使用 HTTP 配置时(Spring Security 3.0 中引入),会自动提供匿名身份验证支持。您可以使用 元素来自定义(或禁用)它。除非您使用传统的 bean 配置,否则您无需配置这里描述的 beans。

三个类共同提供匿名身份验证功能。AnonymousAuthenticationToken 是 Authentication 的一个实现,它存储适用于匿名主体的 GrantedAuthority 实例。有一个相应的 AnonymousAuthenticationProvider,它被链入 ProviderManager,以便接受 AnonymousAuthenticationToken 实例。最后,一个 AnonymousAuthenticationFilter 被链在正常身份验证机制之后,并自动向 SecurityContextHolder 添加一个 AnonymousAuthenticationToken,如果那里没有现有的 Authentication。过滤器和身份验证提供者定义如下:

<bean id="anonymousAuthFilter"class="org.springframework.security.web.authentication.AnonymousAuthenticationFilter">
<property name="key" value="foobar"/>
<property name="userAttribute" value="anonymousUser,ROLE_ANONYMOUS"/>
</bean><bean id="anonymousAuthenticationProvider"class="org.springframework.security.authentication.AnonymousAuthenticationProvider">
<property name="key" value="foobar"/>
</bean>

密钥在过滤器和身份验证提供者之间共享,以便前者创建的令牌可以被后者接受。

在这里,使用 key 属性不应被视为提供了任何真正的安全性。它仅仅是一种簿记练习。如果您在可能由认证客户端构建 Authentication 对象的场景中(例如,使用 RMI 调用)共享包含 AnonymousAuthenticationProvider 的 ProviderManager,那么恶意客户端可以提交它自己创建的 AnonymousAuthenticationToken(带有选择的用户名和权限列表)。如果密钥可以被猜测或者被发现,那么令牌将被匿名提供者接受。这对于正常使用来说并不是问题。然而,如果您使用 RMI,您应该使用一个自定义的 ProviderManager,该提供者管理器省略了匿名提供者,而不是共享您用于 HTTP 认证机制的提供者管理器。

userAttribute 以 usernameInTheAuthenticationToken,grantedAuthority[,grantedAuthority] 的形式表示。InMemoryDaoImpl 的 userMap 属性在等号后面使用相同的语法。

如前所述,匿名身份验证的好处是所有 URI 模式都可以应用安全性,如下例所示:

<bean id="filterSecurityInterceptor"class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
<property name="authenticationManager" ref="authenticationManager"/>
<property name="accessDecisionManager" ref="httpRequestAccessDecisionManager"/>
<property name="securityMetadata"><security:filter-security-metadata-source><security:intercept-url pattern='/index.jsp' access='ROLE_ANONYMOUS,ROLE_USER'/><security:intercept-url pattern='/hello.htm' access='ROLE_ANONYMOUS,ROLE_USER'/><security:intercept-url pattern='/logoff.jsp' access='ROLE_ANONYMOUS,ROLE_USER'/><security:intercept-url pattern='/login.jsp' access='ROLE_ANONYMOUS,ROLE_USER'/><security:intercept-url pattern='/**' access='ROLE_USER'/></security:filter-security-metadata-source>" +
</property>
</bean>

AuthenticationTrustResolver

匿名身份验证讨论的最后一部分是 AuthenticationTrustResolver 接口,以及其相应的 AuthenticationTrustResolverImpl 实现。这个接口提供了一个 isAnonymous(Authentication) 方法,允许感兴趣的类考虑到这种特殊类型的认证状态。ExceptionTranslationFilter 在处理 AccessDeniedException 实例时使用这个接口。如果抛出了 AccessDeniedException 并且认证是匿名类型的,过滤器不会抛出 403(禁止)响应,而是启动 AuthenticationEntryPoint,以便主体可以正确地进行认证。这是一个必要的区别。否则,主体总是被视为“已认证”,并且永远不会有机会通过表单、基本、摘要或其它一些正常认证机制登录。

我们经常看到在早期的拦截器配置中,ROLE_ANONYMOUS 属性被替换为 IS_AUTHENTICATED_ANONYMOUSLY,这在定义访问控制时实际上是相同的东西。这是使用 AuthenticatedVoter 的一个例子,我们在授权章节中会介绍它。它使用一个 AuthenticationTrustResolver 来处理这个特定的配置属性,并授予匿名用户访问权限。AuthenticatedVoter 方法更强大,因为它可以让您区分匿名、记住我和完全认证的用户。然而,如果您不需要这个功能,您可以坚持使用 ROLE_ANONYMOUS,它由 Spring Security 的标准 RoleVoter 处理。

Getting Anonymous Authentications with Spring MVC

SpringMVC 使用自己的参数解析器解析主体类型的参数。

这意味着像这样的构造:

@GetMapping("/")
public String method(Authentication authentication) {if (authentication instanceof AnonymousAuthenticationToken) {return "anonymous";} else {return "not anonymous";}
}

即使对于匿名请求,也将始终返回“非匿名”。原因是 Spring MVC 使用 HttpServletRequest#getPrincipal 解析参数,而当请求是匿名时,该参数为 null。

如果您希望获得匿名请求中的身份验证,请改为使用@CurrentSecurityContext:

Use CurrentSecurityContext for Anonymous requests

@GetMapping("/")
public String method(@CurrentSecurityContext SecurityContext context) {return context.getAuthentication().getName();
}
http://www.mmbaike.com/news/94966.html

相关文章:

  • 专门做批发的网站吗长沙免费建站网络营销
  • qq选号网站怎么做的免费发软文的网站
  • 手机网站模板演示百度官网登录入口手机版
  • 如何删除网站死链竞价专员是做什么的
  • 网站竞价如何做搜索引擎关键词怎么选
  • 学院网站建设品牌传播策划方案
  • 做app和做网站哪个容易我赢网seo优化网站
  • 天津重型网站建设推荐百度上首页
  • 做平台销售网站seo技术外包
  • 用照片做模板下载网站营销网站方案设计
  • 网站如何做网络营销的方式和手段
  • 宣传片制作方案策划学校seo推广培训班
  • wordpress链接 拼音广州网站营销seo费用
  • 做好中心网站建设工作总结会计培训班的费用是多少
  • 宁波模板建站定制网站seo经典案例分析
  • 做电商什么外推网站好线上销售渠道有哪些
  • wordpress验证主题seo优化基础教程pdf
  • 国际网站怎么样做教育机构在线咨询
  • 湖南做网站新手小白怎么做跨境电商
  • 做网站开票内容是什么网站排名seo软件
  • 有自己的域名怎么建立网站西安专业网络推广平台
  • wordpress可以做网站吗珠海百度关键字优化
  • 代做ppt网站好软文推广发布平台
  • 可以让外国人做问卷调查的网站seo运营做什么
  • 杭州制作网站公司国内疫情最新消息
  • 一站式快速网站排名多少钱谷歌浏览器下载安卓版
  • 怎么建设大淘客网站英文seo推广
  • 网站建设实施网站优化的主要内容
  • 烟台网站搭建站长之家关键词挖掘
  • 做网站常用的小语种有哪些如何推广网址链接