第44.1节,“一般问题”

第44.2节,“常见问题”

第44.3节,“春季安全架构问题”

第44.4节,“常见”如何“请求

44.1 General Questions

第44.1.1节,“Spring Security会满足我的所有应用程序安全要求吗?”

第44.1.2节,“为什么不使用web.xml安全性?”

第44.1.3节,“需要什么样的Java和Spring框架版本?”

第44.1.4节:“我是Spring Security的新手,我需要构建一个应用程序,支持通过HTTPS的CAS单点登录,同时允许对某些URL进行本地基本身份验证,并针对多个后端用户信息源(LDAP和JDBC)进行身份验证。我复制了一些我找到的配置文件,但它不起作用。有什么问题吗?”

44.1.1 Will Spring Security take care of all my application security requirements?Spring Security会满足我所有的应用程序安全需求吗?

Spring Security为您的身份验证和授权需求提供了一个非常灵活的框架,但是对于构建一个安全的应用程序,还有许多其他考虑事项超出了它的范围。Web应用程序容易受到各种各样的攻击,你应该熟悉这些攻击,最好是在你开始开发之前,这样你就可以从一开始就记住它们来进行设计和编码。查看OWASP网站,了解网络应用程序开发人员面临的主要问题,以及针对这些问题可以采取的对策。

44.1.2 Why not just use web.xml security?为什么不直接使用web.xml安全性呢?

假设您正在开发一个基于Spring的企业应用程序。您通常需要解决四个安全问题:身份验证、web请求安全、服务层安全(即实现业务逻辑的方法)和域对象实例安全(即不同的域对象具有不同的权限)。牢记这些典型要求:

1、身份验证:servlet规范提供了一种身份验证方法。但是,您需要配置容器来执行身份验证,这通常需要编辑容器特定的“领域”设置。这使得配置不可移植,如果您需要编写一个实际的Java类来实现容器的身份验证接口,它就变得更加不可移植。有了Spring Security,您可以实现完全的可移植性——一直到WAR级别。此外,Spring Security提供了一个经过生产验证的身份验证提供者和机制的选择,这意味着您可以在部署时切换您的身份验证方法。对于编写需要在未知目标环境中工作的产品的软件供应商来说,这尤其有价值。

2、网络请求安全性:servlet规范提供了一种方法来保护您的请求URIs。然而,这些URIs只能用servlet规范自己的有限URI路径格式来表示。Spring Security提供了一种更全面的方法。例如,您可以使用蚂蚁路径或正则表达式,您可以考虑URI的一部分,而不仅仅是请求的页面(例如,您可以考虑超文本传输协议获取参数),并且您可以实现自己的运行时配置数据源。这意味着您的web请求安全性可以在webapp的实际执行过程中动态更改。

3、服务层和域对象安全性:在servlet规范中缺乏对服务层安全性或域对象实例安全性的支持,这对于多层应用程序来说是一个严重的限制。通常,开发人员要么忽略这些需求,要么在他们的MVC控制器代码中实现安全逻辑(或者更糟,在视图中)。这种方法有严重的缺点:

a\关注点的分离:授权是一个横切关注点,应该这样实现。实现授权代码的MVC控制器或视图使得测试控制器和授权逻辑更加困难,调试更加困难,并且经常会导致代码重复。

b\对富客户端和web服务的支持:如果最终必须支持额外的客户端类型,那么嵌入在web层中的任何授权代码都是不可重用的。应该考虑到Spring远程处理导出器只导出服务层beans(而不是MVC控制器)。因此,授权逻辑需要位于服务层,以支持多种客户端类型。

c\分层问题:一个MVC控制器或视图仅仅是实现关于服务层方法或域对象实例的授权决策的不正确的架构层。虽然主体可以被传递给服务层,以使其能够做出授权决定,但是这样做会在每个服务层方法上引入额外的参数。一种更好的方法是使用线程本地来保存主体,尽管这可能会增加开发时间,从而使简单地使用专用的安全框架变得更加经济(基于成本效益)。

d\授权代码质量:人们常说网络框架“使做正确的事情更容易,做错误的事情更难。”安全框架是一样的,因为它们是以一种抽象的方式为广泛的目的而设计的。从头开始编写自己的授权代码并不能提供框架所能提供的“设计检查”,内部授权代码通常缺乏广泛部署、同行评审和新版本带来的改进。

对于简单的应用程序,servlet规范安全性可能就足够了。尽管在web容器可移植性、配置要求、有限的web请求安全性灵活性以及不存在的服务层和域对象实例安全性的背景下考虑,开发人员经常寻求替代解决方案的原因还是显而易见的。

44.1.3 What Java and Spring Framework versions are required?需要哪些Java和Spring框架版本?

Spring Security 3.0和3.1至少需要JDK 1.5,并且至少需要Spring 3.0.3。理想情况下,您应该使用最新版本来避免问题。 Spring Security 2.0.x要求最低JDK版本为1.4,并且是针对Spring 2.0.x构建的。它还应该与使用Spring 2.5.x的应用程序兼容

44.1.4 I’m new to Spring Security and I need to build an application that supports CAS single sign-on over HTTPS, while allowing Basic authentication locally for certain URLs, authenticating against multiple back end user information sources (LDAP and JDBC). I’ve copied some configuration files I found but it doesn’t work. What could be wrong?我是Spring Security的新手,我需要构建一个支持通过HTTPS进行CAS单点登录的应用程序,同时允许对某些URL进行本地基本身份验证,针对多个后端用户信息源(LDAP和JDBC)进行身份验证。我复制了一些我找到的配置文件,但它不起作用。有什么问题吗?

或者替代另一个复杂的场景…

实际上,在成功构建应用程序之前,您需要了解您打算使用的技术。安全很复杂。使用一个登录表单设置一个简单的配置,一些硬编码的用户使用Spring Security的名称空间是相当简单的。使用备份的JDBC数据库也很容易。但是如果你试图直接跳到这样一个复杂的部署场景,你几乎肯定会感到沮丧。建立类似CAS的系统、配置LDAP服务器和正确安装SSL证书所需的学习曲线有了很大的飞跃。所以你需要一步一步来。

从Spring Security的角度来看,您应该做的第一件事就是遵循网站上的“入门”指南。这将带你通过一系列的步骤来启动和运行,并对框架如何运行有所了解。如果你使用的是你不熟悉的其他技术,那么你应该做一些研究,并在将它们组合成一个复杂的系统之前,确保你可以单独使用它们。

44.2 Common Problems常见问题

1、Authentication

第44.2.1节,“当我尝试登录时,我收到一条错误消息,上面写着“不良凭据”。怎么了?”

第44.2.2节,“当我尝试登录时,我的应用程序进入了一个“无休止的循环”,发生了什么事?”

第44.2.3节,“我得到一个例外消息”访问被拒绝(用户是匿名的);“。怎么了?”

第44.2.4节:“为什么我在退出应用程序后仍能看到安全页面?”

第44.2.5节,“我收到一条异常消息:在安全上下文中找不到身份验证对象”。怎么了?”

第44.2.6节,“我无法使LDAP身份验证工作。”我的配置有什么问题?”

Session Management

第44.2.8节,“我使用Spring Security的并发会话控制来防止用户一次登录超过一次。当我登录后打开另一个浏览器窗口时,它不会阻止我再次登录。为什么我可以登录多次?”

第44.2.9节,“当我通过Spring Security进行身份验证时,为什么会话Id会改变?”

第44.2.10节:“我正在使用Tomcat(或其他一些servlet容器),并且已经为我的登录页面启用了HTTPS,之后切换回HTTP。”它不起作用-我只是在验证后返回登录页面。”

第44.2.12节:“我正在尝试使用并发会话控制支持,但它不允许我重新登录,即使我确定我已经注销并且没有超过允许的会话数。”

第44.2.13节:“Spring Security通过将创建会话属性设置为从不,正在某处创建会话,尽管我已将其配置为不创建会话。”

Miscellaneous

第44.2.14节,“执行开机自检时,我得到403禁止”

第44.2.15节:“我正在使用RequestDispatcher将一个请求转发到另一个URL,但是我的安全约束没有被应用。”

第44.2.16节:“我已经将Spring Security的<全局方法安全性>元素添加到我的应用程序上下文中,但是如果我将安全性注释添加到我的Spring MVC控制器beans中(Struts动作等)。)那么它们似乎没有效果。”

第44.2.17节:“我有一个用户已经过身份验证,但是当我在某些请求期间尝试访问SecurityContextHolder时,身份验证为空。为什么我看不到用户信息?”

第44.2.18节:“当使用URL属性时,授权JSP标签不尊重我的方法安全注释。”

44.3 Spring Security Architecture Questions春季安全架构问题

第44.3.1节,“我如何知道X类是哪个包?”

第44.3.2节,“名称空间元素如何映射到传统的bean配置?”

第44.3.3节,“角色”是什么意思?为什么我需要在我的角色名称中使用它

第44.3.4节,“我如何知道向我的应用程序添加哪些依赖项来使用Spring Security?”

第44.3.5节,“运行嵌入式ApacheDS LDAP服务器需要什么依赖关系?”

第44.3.6节,“什么是用户详细信息服务,我需要吗?”

44.4 Common "Howto" Requests常见的“如何”请求

第44.4.1节:“我需要用比用户名更多的信息登录。”如何添加对额外登录字段的支持(如公司名称)?”

第44.4.2节,“如果只有请求的网址的片段值不同(例如/foo#bar和/foo#blah),我如何应用不同的拦截网址约束?”

第44.4.3节,“如何在用户详细信息服务中访问用户的IP地址(或其他网络请求数据?”

第44.4.4节,“如何从用户详细信息服务设备访问Https会话?”

第44.4.5节,“如何在用户详细信息服务中访问用户密码?”

第44.4.6节,“如何在应用程序中动态定义受保护的网址?”

第44.4.7节,“如何针对LDAP进行身份验证,但从数据库中加载用户角色?”

第44.4.8节,“我想修改由命名空间创建的bean的属性,但是模式中没有任何东西支持它。”除了放弃使用名称空间,我还能做什么?”

44. Spring Security FAQ春季安全常见问题的更多相关文章

  1. Spring Security 5.0.x 参考手册 【翻译自官方GIT-2018.06.12】

    源码请移步至:https://github.com/aquariuspj/spring-security/tree/translator/docs/manual/src/docs/asciidoc 版 ...

  2. spring security之httpSecurity使用示例

    如果在HttpSecurity中配置需要authenticate(),则如果没有登陆,或没有相关权限,则会无法访问 2017-01-02 23:39:32.027 DEBUG 10396 --- [n ...

  3. 在Spring Boot中使用Spring Security实现权限控制

    丢代码地址 https://gitee.com/a247292980/spring-security 再丢pom.xml <properties> <project.build.so ...

  4. Spring Security中html页面设置hasRole无效的问题

    Spring Security中html页面设置hasRole无效的问题 一.前言 学了几天的spring Security,偶然发现的hasRole和hasAnyAuthority的区别.当然,可能 ...

  5. Spring Security(十九):6. Security Namespace Configuration

    6.1 Introduction Namespace configuration has been available since version 2.0 of the Spring Framewor ...

  6. Spring Security的几个重要词

    1.SecurityContextHolder:是安全上下文容器,可以在此得知操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保存在SecurityContextHolder中. O ...

  7. 【Spring】12、Spring Security 四种使用方式

    spring security使用分类: 如何使用spring security,相信百度过的都知道,总共有四种用法,从简到深为:1.不用数据库,全部数据写在配置文件,这个也是官方文档里面的demo: ...

  8. Spring Security Hello World Example--reference

    In this tutorial, we will see how we can use Spring security to protect specific resources. This Hel ...

  9. 单点登录(SSO)解决方案之 CAS客户端与Spring Security集成

    接上篇:单点登录(SSO)解决方案之 CAS服务端数据源设置及页面改造 Spring Security Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制 ...

随机推荐

  1. PyCharm+PyQt5+Qt Designer配置

    配置前提 因为本机已经配置完毕了,本次使用的是虚拟机中的Win7系统,Win10系统操作步骤完全一样,无任何区别 PyCharm (这个不多说,官网下载安装,我是用的是2019.3版本) Python ...

  2. Arrays.sort() ----- TimSort

    Arrays.sort() Arrays.sort()对于基本类型使用的是DualPivotQuicksort双轴快速排序,而对于非基本类型使用的是TimSort,一种源自合并排序和插入排序的混合稳定 ...

  3. python-闭包和装饰器-02-装饰器(decorator)

    装饰器(decorator) 理解了上一章的闭包之后,装饰器就是闭包的一种应用,只是外部函数的参数传入的不是普通的变量类型,而是传入一个函数名.装饰器一般用于:不修改被装饰函数(即外部函数传入的参数) ...

  4. APP自动化 -- MobileBy

    一.BobileBy源码 selenium中有 By appium就有MobileBy. 二.MobileBy示例 MobileBy就是继承的By,所以,语法基本是一样的.

  5. [leetcode/lintcode 题解] 一致性哈希 II · Consistent Hashing II

    [题目描述] 在 Consistent Hashing I 中我们介绍了一个比较简单的一致性哈希算法,这个简单的版本有两个缺陷: 增加一台机器之后,数据全部从其中一台机器过来,这一台机器的读负载过大, ...

  6. SQL语法入门

    SQL语句概述 ·SQL定义:是一种特定目的编程语言,用于管理关系数据库 ·GaussDB T是一种关系数据库,SQL语句包括 1.DDL 数据定义语言,用于定义或修改数据库中的对象(表,视图,序列, ...

  7. control+B进入layout文件的xml文本编辑模式

    control+B进入layout文件的xml文本编辑模式

  8. API返回延迟,FPM重启后恢复之后又重现 问题解决方案

    背景 最近在提供后台API时,提供了一个简单逻辑的接口 部署在测试环境,自测没问题,提交测试 突然有一天,接口响应延迟严重,几乎每次都是3-4秒返回 这对于一个接口来说,肯定是有问题的 于是便有了以下 ...

  9. filter 函数基本写法

    filter 返回一个符合要求的元素所构成的新列表 filter(函数,可迭代对象)   map 和 filter 混合使用将 lst_num 中为偶数的取出来进行加2 和 乘2 操作   2020- ...

  10. PHP mt_rand() 函数

    实例 生成随机数: <?phpecho(mt_rand() . "<br>");echo(mt_rand() . "<br>"); ...