SpringSecurity

maven 构建 springmvc + spring security 权限控制示例

最后都变了- 提交于 2019-12-06 17:28:43
maven 构建 springmvc + spring security 权限控制示例。 介绍 :Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。用户认证指的是验证某个用户是否为系统中 的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。用户授权指的是验证某个用户 是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说, 系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。 对于上面提到的两种应用情景,Spring Security 框架都有很好的支持。在用户认证方面,Spring Security 框架支持主流的认证方式,包括 HTTP 基本认证、HTTP 表单验证、HTTP 摘要认证、OpenID 和 LDAP 等。在用户授权方面,Spring Security 提供了基于角色的访问控制和访问控制列表(Access Control List,ACL),可以对应用中的领域对象进行细粒度的控制。下面是 spring

spring security3.x学习(19)_tomcat的SSL

不想你离开。 提交于 2019-12-05 18:49:22
本文为转载学习 原文链接: http://blog.csdn.net/dsundsun/article/details/11880683 在日常使用在线站点时,你很可能已经听说或使用过SSL。安全套接字层(SSL)协议,以及其后续的传输层安全(TLS),被用来为网络上的HTTP事务提供传输层的安全——它们被称为安全的HTTP事务(HTTPS)。 简而言之,SSL和TLS以一种对用户透明的方式保护原始的HTTP传输数据,这些数据在客户端浏览器和web服务器之间传输。但是作为开发人员,在设计安全站点时,规划使用SSL是很重要的。Spring Security提供了一系列的配置选项可以灵活的将SSL集成到web应用中。 【尽管SSL和TLS是不同的协议(TLS是更成熟的协议),但是大多数人更熟悉SSL这个术语,所以在本书的剩余部分,我们使用这个术语来代指SSL和TLS两个协议。】 详细介绍SSL协议的机制已经超出了本书的范围,有一些很好的书籍和技术论文很详细地介绍了其规范和协议(你可以从RFC:5246:传输安全协议(TLS)Version1.2开始,在以下地址http://tools.ietf.org/html/rfc5246) 配置Apache Tomcat以支持SSL 使用Java的keytool命令来生成一个key store: 这样我在当前用户文件夹下(C:\Users\dl

《Spring Security3》第四章第三部分翻译下(密码加salt)

孤人 提交于 2019-12-04 16:46:55
你是否愿意在密码上添加点salt? 如果安全审计人员检查数据库中编码过的密码,在网站安全方面,他可能还会找到一些令其感到担心的地方。让我们查看一下存储的 admin 和 guest 用户的用户名和密码值: 这看起来很安全——加密后的密码与初始的密码看不出有任何相似性。但是如果我们添加一个新的用户,而他碰巧和 admin 用户拥有同样的密码时,又会怎样呢? 现在,注意 fakeadmin 用户加密过后密码与 admin 用户完全一致。所以一个黑客如果能够读取到数据库中加密的密码,就能够对已知的密码加密结果和 admin 账号未知的密码进行对比,并发现它们是一样的。如果黑客能够使用自动化的工具来进行分析,他能够在几个小时内破坏管理员的账号。 【 鉴于作者本人使用了一个数据库,它里面的密码使用了完全一致的加密方式,我和工程师团队决定进行一个小的实验并查看明文 password 的 SHA-1 加密值。当我们得到 password 的加密形式并进行数据库查询来查看有多少人使用这个相当不安全的密码。让我们感到非常吃惊的是,这样的人有很多甚至包括组织的一个副总。每个用户都收到了一封邮件提示他们选择难以猜到的密码有什么好处,另外开发人员迅速的使用了一种更安全的密码加密机制。 】 请回忆一下我们在第三章中提到的彩虹表技术,恶意的用户如果能够访问到数据库就能使用这个技术来确定用户的密码。这些

《Spring Security3》第四章第四部分翻译(Remember me后台存储和SSL)

99封情书 提交于 2019-12-03 13:37:44
将Remember me功能迁移至数据库 现在你可能会意识到我们remember me功能的实现,能够在应用重启前很好的使用,但在应用重启时用户的session会被丢失。这对用户来说会不太便利,他们不应该关心JBCP Pets的维护信息。 幸运的是,Spring Security提供了将rememberme token持久化到任何存储的接口o.s.s.web.authentication.rememberme .PersistentTokenRepository,并提供了这个接口的JDBC实现 。 在这里,修改remember me的配置以持久化到数据库是非常简单的。Spring Security 配置的解析器能够识别出<remember-me>声明的data-source-ref新属性并为RememberMeServices切换实现类 。让我们了解完成这个功能所需要的步骤。 添加SQL以创建remember me schema 我们需要将包含期望schema定义的SQL文件放在classpath下(WEB-INF/classes中),它会与我们在前面使用的其它启动SQL脚本放在一起。我们将这个SQL脚本命名为remember-me-schema.sql: create table persistent_logins ( username varchar_ignorecase(50

《Spring Security3》第四章第一部分翻译下(自定义的UserDetailsServic

徘徊边缘 提交于 2019-12-03 13:11:32
创建一个自定义的JDBC UserDetailsService 在 com.packtpub.springsecurity.security 包下创建如下的类: public class CustomJdbcDaoImpl extends JdbcDaoImpl implements IChangePassword { public void changePassword(String username, String password) { getJdbcTemplate() update("UPDATE USERS SET PASSWORD = ? WHERE USERNAME = ?", password, username); } } 你可以看到这个类扩展了 JdbcDaoImpl 默认类,提供了按照用户请求更新数据库中密码的功能。我们使用标准的 Spring JDBC模板 完成这个功能。 为自定义的JDBC UserDetailsService添加Spring bean声明 在 dogstore-base.xml配置文件 中,添加如下的Spring Bean声明: <bean id="jdbcUserService" class="com.packtpub.springsecurity.security.CustomJdbcDaoImpl"> <property name

SpringSecurity3.X的remember-me

这一生的挚爱 提交于 2019-12-03 13:06:02
在SpringSecurity中配置remember-me时,遇到这样的问题,remember-me没有起作用,按照官方文档的讲解,只需要在<http>中增加<remember-me />配置,并在login.jsp中增加如下代码即可: <input id="_spring_security_remember_me" name="_spring_security_remember_me" type="checkbox" value="true"/> 简要说明一下SpringSecurity的登录过程: UsernamePasswordAuthenticationFilter :获得用户提交的用户名和密码信息 -->UserDetailsService :由其封装用户对象 -->AbstractUserDetailsAuthenticationProvider :转由其进行密码和权限验证,验证通过后封装一个Authentication -->ProviderManager:会将Authentication封装到SecurityContext中(默认情况下,ProviderManager会在认证成功后清除掉Authentication的密码信息,但会保留用户名称) -->AbstractRememberMeServices :判断请求参数中是否包含_spring_security

《Spring Security3》第二章第一部分翻译

放肆的年华 提交于 2019-12-02 06:28:47
本文为转载学习 原文链接: http://lengyun3566.iteye.com/blog/1078173 第二章 Spring Security起步 在本章中,我们将要学习Spring Security背后的核心理念,包括重要的术语和产品架构。我们将会关注配置Spring Security的一些方式以及对应用的作用。 最重要的是为了解决工作中的问题,我们要开始使得JBCP Pets的在线商店系统变得安全。我们将会通过分析和理解认证如何保护在线商店的适当区域来解决在第一章:一个不安全应用的剖析中审计人员发现的第一个问题,即缺少URL保护和统一的认证造成的权限扩散。 在本章的内容中,我们将会涉及: 了解应用中安全的重要概念; 使用Spring Security的快速配置功能,为JBCP Pets在线商店实现基本层次的安全; 理解Spring Security的全貌; 探讨认证和授权的标准配置和选项; 在Spring Security访问控制中使用Spring的表达式语言(Spring Expression Language) 安全的核心概念 由于安全审计结果的启示作用,你研究了Spring Security并确定它能够提供一个坚实的基础,以此可以构建一个安全的系统来解决在安全审计JBCP Pet在线商店中发现的问题,而那个系统是基于Spring Web MVC开发的。

《Spring Security3》第四章第一部分翻译上(数据库管理信息)

别等时光非礼了梦想. 提交于 2019-12-02 06:07:41
第四章 凭证安全存储 到现在为止,我们已经将 JBCP Pets 站点做了一些用户友好性方面的升级,包括一个自定义的登录页、修改密码以及 remember me 功能。 在本章中, 我们将会把到目前为止都在使用的内存存储转移到数据库作为后台的认证存储。 我们将会介绍默认的 Spring Security 数据库 schema ,并介绍自定义扩展 JDBC 实现的方式。 在本章的课程中,我们将会: 理解如何配置Spring Security才能 使用JDBC访问数据库服务 以实现用户的存储和认证; 学习如何 使用基于内存数据库HSQLDB的JDBC配置 ,我们使用这个数据库主要是为了开发测试的目的; 使得Spring Security的JDBC能够 支持已经存在的遗留数据库schema 掌握两种管理用户名和密码的功能,两者都会 涵盖内置的和自定义的方式 ; 掌握 配置密码编码 的不同方法; 理解 密码 salting 技术 以提供更安全的方式存储密码; 持久化用户的remember me token ,使得在服务器重启后token仍能有效; 通过配置 SSL/TLS 加密和端口映射, 在传输层上保护应用的安全 。 使用数据库后台的Spring Security认证 我们进行安全控制的JBCP Pets应用有一个明显问题是基于内存的用户名和密码存在时间比较短,对用户很不友好

《Spring Security3》第四章第三部分翻译上(配置安全的密码)

这一生的挚爱 提交于 2019-12-02 06:07:28
配置安全的密码 我们回忆 第一章:一个不安全应用的剖析 中,审计人员认为密码以明文形式进行存储是最高优先级的安全风险。实际上,在任何安全系统中,密码安全都是保证已经经过认证的安全实体是真实可靠的重要方面。安全系统的设计人员必须保证密码存储时,任何恶意的用户想要进行破解都是非常困难的。 在数据库存储时,需要遵守以下的准则: 密码不能以明文的形式进行存储(简单文本); 用户提供的密码必须与数据库存储的密码进行比较; 密码不能应用户的请求提供(即使用户忘记了密码)。 对于大多数应用来说,为了满足以上要求最适合的方式是对密码进行单向的编码或加密。单向编码提供了安全和唯一的特性,这对于正确的认证用户非常重要,它能够保证密码一旦被加密就不能再被解密了。 在大多数的安全应用设计中,一般没有必要和实际要求根据用户的请求检索用户的密码,因为如果没有附加的安全认证,提供用户的实际密码会有很大的安全风险。作为替代方案,大多数的应用为用户提供了重设密码的功能,要么需要提供额外的认证信息(如社会保险号码、生日、缴税 ID 或其它个人信息),要么通过一个基于 email 的系统。 【存储其它类型的敏感信息:以下的准则可以应用于密码以及其它类型的敏感信息,包括社会保险号以及信用卡信息(尽管基于应用的不同,它们中的一些需要解密的能力)。比较常见的是数据库以多种形式来存储这些敏感信息,比如用户 16

《Spring Security3》第三章第一部分翻译

走远了吗. 提交于 2019-12-02 06:07:15
第三章 增强用户体验 在本章中,我们将对 JBCP Pets 在线商店增加一些功能,这些新功能能够为用户提供更愉悦和可用的用户体验,同时提供一些对安全系统很重要的功能。 在本章中,我们将要: 按照你的意愿自定义登录和退出页面,并将它们与标准的 Spring web MVC 的控制器相关联; 使用 remember me 功能为用户提供便利,并理解其背后的安全含义; 构建用户账号管理功能,包括修改密码以及密码遗忘找回功能。 自定义登录页 你可能还记得在前一章中,我们使用了 Spring Security 的 security 命名空间的基本配置功能。这为我们提供了基本的登录、认证和授权功能,但是这肯定没有到达产品质量的要求。在我们向老板汇报进度前,要添加的一个很重要的增强功能就是使得登录界面在展现和行为上与我们在线应用的其他地方保持一致。 回忆一下现在的登录界面大致如下所示: 自动配置并没有为我们提供很多其他的功能,如为登录页面添加样式。我们要为站点增加以下的功能: 拥有页头、页脚以及与 JBCP Pets 样式一致的登录页; 允许用户退出的链接 允许用户修改密码的页面。 登录和退出的流程应该如下图所示: 我们将会通过一系列的练习来开发完善这个站点的结构。当开发登录和退出功能时,我们将会讲解所做的内容,所以当我们需要扩展站点的基本功能时,能够对于我们构建的内容有一个清晰的理解。