RpyStatus翻译成中文

我与他们联系许多时期发现当它將运输时并且他们继续改变日期。 我同时购买了许多事从其他供应商并且所有到达了,在这个项目运输了以前 我再不会是购买从这位卖主,因为他们是很慢的在运输命令

we painted the body shower gel, the last washed clean. 由于我的母亲会同志一样天真象小B到B看保证最后,听我的母亲的那里唠叨的词: 浴时间,作为苐一湿从头到脚趾神色我们绘了身体阵雨胶凝体,最后被洗涤的干净


}

第一步是创建我们的Spring Security Java配置 该配置会创建一个名为springSecurityFilterChain的Servlet过滤器,它负责应用程序中的所有安全性(保护应用程序URL验证提交的用户名和密码,重定向到登录表单等) 你可鉯在下面找到Spring Security Java

我们欢迎您参与Spring Security项目。 有很多贡献方式包括阅读论坛并回答其他人提出的问题,编写新代码改进现有代码,协助编写文檔开发示例或教程,或仅仅提出建议

熟悉设置和运行一些基于命名空间配置的应用程序后,您可能希望更深入地了解框架在命名空间外观背后的工作原理 像大多数软件一样,Spring Security在整个框架中都有一些中心接口类和概念抽象。 在参考指南的这一部分我们将看看其中的┅些内容,看看它们如何协同工作来支持Spring Security中的认证和访问控制

如果您正在使用基于Java的配置,则可以开始使用了 如果您使用的是XML配置,則需要进行一些更新 第一步是确保您已更新/xml/ns/javaee"

这将产生以下JSON结构

如果应用程序未验证Content-Type,那么它将暴露于此漏洞利用 根据设置,验证Content-Type的Spring MVC应鼡程序仍然可以通过更新URL后缀来利用".json"来结束如下所示:

 即使网站执行的重定向,恶意用户也可能会拦截最初的HTTP请求并操纵响应(即重定姠到并窃取其凭据)
 
 
许多用户省略了https协议,这就是 创建的原因 一旦作为 添加,浏览器可以提前知道任何对的请求应该被解释为 这大夶降低了发生中间人攻击的可能性。

根据{{??0}}HSTS标头仅被注入到HTTPS响应中。 为了使浏览器确认标题浏览器必须首先相信签署用于建立连接嘚SSL证书的CA(而不仅仅是SSL证书)。

 
将站点标记为HSTS主机的一种方法是将主机预加载到浏览器中 另一种方法是将"Strict-Transport-Security"标头添加到响应中。 例如以丅内容将指示浏览器将域名视为一年的HSTS主机(一年大约有秒):
 

与其他标题一样,Spring Security默认添加HSTS 您可以使用>元素自定义HSTS标头,如下所示:
同樣您可以只启用带有Java配置的HSTS头文件:
 

HTTP Public Key Pinning(HPKP)是一项安全功能,它告诉Web客户端将特定的加密公钥与特定的Web服务器相关联以防止伪造的证书對中间人(MITM)的攻击。

为了确保在TLS会话中使用的服务器公钥的真实性该公钥被封装到通常由证书颁发机构(CA)签署的/pkp-report" ; includeSubDomains

是标准的JSON结构,可鉯通过Web应用程序自己的API或公开托管的HPKP报告服务来捕获如https://report-加载脚本,用户代理将向report-uri指令指定的声明URL发送违规报告但仍允许加载违规资源。

默认情况下需要注意Spring Security does not add内容安全策略 Web应用程序作者必须声明安全策略以强制执行和/或监视受保护的资源。

例如鉴于以下安全策略:

 
 
由於SockJS试图模拟WebSockets,它也绕过了同源策略 这意味着开发人员在使用SockJS时需要明确地保护他们的应用程序免受外部域的攻击

请注意,为了定义服务器位置不需要指定单独的ContextSource - 该bean是完全独立的。 例如名为"Sharon"的用户可以通过输入用户名sharon或完整的Active

会话管理问题是论坛问题的常见来源。 如果您正在开发Java Web应用程序您应该了解如何在servlet容器和用户浏览器之间维护会话。 您还应该了解安全和非安全cookie之间的区别以及使用HTTP / HTTPS和两者之间切換的含义 Spring Security与维护会话或提供会话标识无关。 这完全由servlet容器处理

我使用Spring Security的并发会话控制来防止用户一次登录多次。

当我登录后打开另一個浏览器窗口时它不会阻止我再次登录。 为什么我可以多次登录

浏览器通常为每个浏览器实例保留一个会话。 一次不能有两个单独的會话 因此,如果您在另一个窗口或选项卡中重新登录则只需在同一会话中重新进行身份验证。 服务器对标签窗口或浏览器实例不了解。 它看到的只是HTTP请求它根据它们包含的JSESSIONID cookie的值将它们绑定到特定的会话。 当用户在会话期间进行身份验证时Spring Security的并发会话控制会检查他們拥有的其他已验证会话的数量。 如果他们已经使用同一个会话进行了身份验证则重新身份验证将不起作用。

为什么在通过Spring Security进行身份验證时会话Id发生了变化

通过默认配置,Spring Security在用户身份验证时更改会话ID 如果您使用的是Servlet 3.1或更新的容器,则仅改变会话ID 如果您使用的是较旧嘚容器,则Spring Security会使现有会话无效创建新会话并将会话数据传输到新会话。 以这种方式更改会话标识可防止"session-fixation"次攻击 您可以在线和参考手册Φ找到更多关于这方面的信息。

我使用的是Tomcat(或其他一些servlet容器)并为我的登录页面启用了HTTPS,之后切换回HTTP

它不起作用 - 我只是在认证之后囙到登录页面。

发生这种情况的原因是在HTTPS下创建的会话(会话cookie标记为"secure")无法在HTTP下使用。浏览器不会将cookie发送回服务器任何会话状态都将丟失(包括安全上下文信息)。首先在HTTP中启动一个会话应该可以工作因为会话cookie不会被标记为安全。 但是Spring Security的 可能会干扰此操作,因为它會导致将新的会话ID cookie发送回用户的浏览器通常使用安全标志。 为了解决这个问题你可以禁用会话固定保护,但是在新的Servlet容器中你也可鉯配置会话cookie以不使用安全标志。 请注意在HTTP和HTTPS之间切换通常不是一个好主意,因为任何使用HTTP的应用程序都容易受到中间人攻击 为了确保咹全,用户应该开始以HTTPS访问您的网站并继续使用它直到他们注销。 即使点击通过HTTP访问的页面上的HTTPS链接也是有风险的 如果您需要更多说垺力,请查看 之类的工具

我没有在HTTP和HTTPS之间切换,但我的会话仍在迷失

请注意出于安全原因,首选使用Cookie因为它不公开URL中的会话信息。

峩试图使用并发会话控制支持但它不会让我重新登录,即使我确定我已经注销并且没有超出允许的会话

确保您已将监听器添加到您的web.xml攵件中。 确保在会话销毁时通知Spring Security会话注册表是非常重要的 没有它,会话信息将不会从注册表中删除

Spring Security正在创建一个会话,尽管我已经将咜配置为不会通过将create-session属性设置为永远不会。

这通常意味着用户的应用程序正在创建一个会话但他们并不知道它。 最常见的罪魁祸首是JSP很多人都不知道JSP默认会创建会话。 要防止JSP创建会话请将指令<%@ page session="false" %>添加到页面的顶部。

我正在使用RequestDispatcher将请求转发到另一个URL但我的安全限制未被应用。

过滤器默认不会应用于转发或包含 如果您确实希望将安全筛选器应用于转发和/或包含,则必须使用<dispatcher>元素(它是<filter-mapping>的子元素)在web.xml中顯式配置这些筛选器

在Spring Web应用程序中,保存调度程序servlet的Spring MVC bean的应用程序上下文通常与主应用程序上下文分离 这些"child"上下文中的bean对应用程序的其餘部分不可见。 Bean中的方法的安全约束将不会被强制执行因为无法从DispatcherServlet上下文中查看bean。

通常我们会建议在服务层而不是单独的网络控制器上應用方法安全性

我有一个肯定已经过身份验证的用户,但是当我在某些请求期间尝试访问SecurityContextHolder时身份验证为空。

为什么我看不到用户信息

如果您已使用与URL模式匹配的<intercept-url>元素中的属性filters='none'排除安全筛选器链中的请求,则不会为该请求填充SecurityContextHolder 检查调试日志以查看请求是否通过过滤器鏈。 (您正在阅读调试日志对吗?)

当使用URL属性时,授权JSP标记不尊重我的方法安全注释

在使用<sec:authorize>中的url属性时,方法安全性不会隐藏链接因为我们无法容易地反向设计将URL映射到哪个控制器端点,因为控制器可以依靠标题当前用户等来确定哪种方法调用。

Spring安全体系结构問题

我如何知道X类包含在哪个包中

定位类的最好方法是在IDE中安装Spring Security源代码。该分配包括项目分成的每个模块的源罐 将这些添加到您的项目源路径中,您可以直接导航到Spring Security类(Eclipse中的Ctrl-Shift-T)这也使得调试变得更加容易,并允许您通过直接查看代码出现的位置来查看异常情况从而排除异常。

命名空间元素如何映射到传统的bean配置

在参考指南的附录名称空间中,通过名称空间创建了哪些bean的概述 在 上还有一篇名为"Behind the Spring

"ROLE_"的含义是什么以及为什么我需要在我的角色名称上使用它?

attributes"上执行操作(例如方法调用)采用这种方法,并不是所有的属性都可能与所有選民有关而且选民需要知道什么时候应该忽略某个属性(弃权),以及何时应该投票授予或拒绝基于属性值的访问 最常用的投票人是RoleVoter,默认情况下每当它找到带有"ROLE_"前缀的属性时就会投票 它将该属性(如"ROLE_USER")与当前用户分配的权限名称进行简单比较。 如果它发现匹配(他們有一个称为"ROLE_USER"的权限)它会投票授予访问权限,否则它会投票拒绝访问权限

可以通过设置RoleVoter的{??{0}}属性来更改前缀。如果您只需要在应鼡程序中使用角色并且不需要其他自定义选民则可以将前缀设置为空白字符串,在这种情况下RoleVoter将所有属性视为角色

我如何知道添加到峩的应用程序中以使用Spring Security的依赖关系?

这取决于您正在使用的功能以及您开发的应用程序类型 使用Spring Security 3.0,项目罐被划分为明显不同的功能区域因此,根据应用程序需求计算出您需要的Spring Security罐是非常简单的 所有应用程序都需要spring-security-core jar。

对于第三方罐子来说情况并不总是那么明显。 一个恏的起点是从预构建的示例应用程序WEB-INF / lib目录中复制这些应用程序 对于基本应用程序,您可以从教程示例开始 如果您想使用LDAP和嵌入式测试垺务器,那么请使用LDAP示例作为起点 参考手册还包括 列出了每个Spring Security模块的第一级依赖关系,并提供了一些关于它们是否可选以及它们需要什麼的信息

如果您使用maven构建项目,那么将适当的Spring Security模块作为依赖关系添加到您的pom.xml中会自动引入该框架所需的核心jar 在Spring Security POM文件中任何标记为"optional"的文件都必须添加到您自己的pom.xml文件中(如果需要的话)。

运行嵌入式ApacheDS LDAP服务器需要哪些依赖关系

如果您使用的是Maven,则需要将以下内容添加到您嘚pom依赖项中:

其他需要的罐子应该被过渡拉动

UserDetailsService是用于加载特定于用户帐户的数据的DAO界面。 它没有其他功能来加载该数据以供框架中的其怹组件使用 它不负责认证用户。 使用用户名/密码组合对用户进行身份验证通常由DaoAuthenticationProvider执行该用UserDetailsService注入以允许其为用户加载密码(和其他数据)以便比较它与提交的价值。 请注意如果您使用的是LDAP,则

我需要使用更多信息登录,而不仅仅是用户名

如何添加对额外登录字段的支持(例如 一个公司名称)?

这个问题在Spring Security论坛上反复提到所以你可以通过搜索档案(或通过谷歌)找到更多的信息。

您还需要自定义实際的身份验证过程 例如,如果您使用自定义身份验证令牌类则必须编写AuthenticationProvider来处理它(或者扩展标准DaoAuthenticationProvider)。如果您已连接字段则可以实施洎己的UserDetailsService,将其拆分并加载适当的用户数据以进行身份??验证

如果只有请求的URL的片段值不同(如/foo#bar和/ foo#blah?)我该如何应用不同的截取url约束?

你不能这样做因为片段不是从浏览器传输到服务器。 上面的URL与服务器的角度相同 这是GWT用户常见的问题。

显然你不能(不诉诸于線程局部变量之类的东西),因为提供给接口的唯一信息就是用户名 您应该直接实施AuthenticationProvider并从提供的Authentication令牌中提取信息,而不是实施UserDetailsService

如果您確实需要访问会话,那么必须通过自定义Web层来完成

如何动态定义应用程序中的安全URL?

人们经常询问如何将安全URL和安全元数据属性之间的映射存储在数据库中而不是在应用程序上下文中。

你应该问自己的第一件事是如果你真的需要这样做 如果应用程序需要安全保护,则還需要根据定义的策略彻底测试安全性 在推向生产环境之前,可能需要进行审计和验收测试 有安全意识的组织应该意识到,通过在运荇时修改安全设置可以通过更改配置数据库中的一行或两行来立即清除其勤奋测试过程的好处。 如果您已经考虑到了这一点(可能在您嘚应用程序中使用多层安全性)那么Spring Security允??许您完全自定义安全元数据的来源。 如果您选择您可以使其完全动态。

然后您会针对特萣的FilterInvocation脚注实施FilterInvocationSecurityMetadataSource以便根据需要加载数据:[{2}}对象包含HttpServletRequest,因此您可以获取URL或任何其他相关信息以此为基础确定返回属性列表包含的内容。]一個非常基本的大纲看起来像这样:

 

我如何针对LDAP进行身份验证,但从数据库加载用户角色

要改用JDBC,你可以使用任何适合你的模式的SQL来自己實现接口:

 

然后您可以将这种类型的bean添加到您的应用程序上下文中,并将其注入到LdapAuthenticationProvider中这在参考手册的LDAP章节中有关使用显式Spring bean配置LDAP的章节Φ有所介绍。 请注意在这种情况下,您不能使用命名空间进行配置 您还应该咨询Javadoc以获取相关的类和接口。

我想修改由名称空间创建的bean嘚属性但架构中没有任何内容支持它。

我能做些什么来放弃命名空间的使用

命名空间的功能是有意限制的,所以它不能涵盖你用普通嘚bean所能做的所有事情 如果你想做一些简单的事情,比如修改一个bean或者注入一个不同的依赖项,你可以通过向你的配置添加一个BeanPostProcessor来实现 更多信息可以在 中找到。为了做到这一点您需要了解一些有关创建哪些bean的信息,所以您还应该阅读关于的上述问题中的博客文章

处悝器类看起来像这样:

 

然后您将在您的应用程序上下文中注册这个bean。 Spring将自动在应用程序上下文中定义的bean上调用它

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信