`
文章列表
前言:   在之前的篇章中我们已经讲述了spring security的部分组件,接下来我们再重点查看下另外两个重要的和认证相关的接口及其实现类:AuthenticationManager, UserDetailsService 。 1.AuthenticationManager, ProviderManager 和 AuthenticationProvider   AuthenticationManager是认证的核心接口,里面只有一个方法authenticate,传入一个待认证的Authentication对象,再返回一个完全组装好带有权限信息的Authentication。那么在实际中他 ...
前言:   本文主要讲述在spring security鉴权的实现方式,目前spring security 支持基于 spring aop、filter、aspectj三种认证方式,分别提供对方法调用、web请求、业务对象的访问控制。在spring security中健全主要是由AccessDecisionManager这个类完成的,这个类有一个decide方法,接受一个代表认证者信息的Authentication对象,一个安全对象(security object),以及一个和这个对象相关联的安全属性列表(例如代表所需权限的角色列表) 1. AOP通知   在spring aop中有四种通知 ...
前言:   本文将探讨当web应用中加入的spring security功能时,用户是如何认证的、安全上下文是如何创建的。 环境:   spring boot 版本:1.5.4.RELEASE 1.一个典型的web应用的认证过程如下: 用户访问网站主页,点击一个链接 一个请 ...
前言:   在spring security中认证具体指的是什么以及如何做的,本文做一个简单的阐述 环境   spring boot 版本:1.5.4.RELEASE 下面我们一起考虑一个简单的大家都熟悉的认证情景 1.一个用户被提示输入用户名和密码 2.系统验证用户名和密码是否合法 3.用户的上下文信息被获取(如用户的权限列表) 4.创建用户对应的安全上下文 5.当用户继续执行后续操作时,系统的安全访问控制机制利用当前的安全上下文信息来判断这些操作是否被许可 上面情景中的前三步就是基本的认证过程,下面让我们看下这在spring security中是如何发生的。 1.从httpRequ ...
前言:   本文主要介绍在spring security中的几个核心组件,以及他们之间是怎样相互协作的。 环境:   spring boot 版本:1.5.4.RELEASE 1.核心组件之SecurityContextHolder   SecurityContextHolder是spring security中最基本的组件,是用来存储我们应用的安全上下文的,包含了当前系统认证用户的详细信息。默认情况下SecurityContextHolder用一个ThreadLocal来存储这些详情,这意味着只要是在认证线程中执行的方法,不管我们传不传入这个安全上下文我们都能访问到。   如果使用Threa ...
前言:   SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一。CAS是一个开源的企业级SSO具体实现,spring security也提供了和SSO的集成,本文用一个简单示例演示下如何在spring security中利用cas,为了简单起见,本文利用http来访问cas server,关于如何搭建支持http协议的cas server可以参照 Overlay-Cas server搭建 环境:   s ...
前言:   CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO )。本文讲解基于4.2.7版本的cas server,并利用war overlay技术做一些简单 ...
前言:   在实际应用中,我们可能会限制一个用户同时登录同一个应用的次数。例如,我们希望系统中只有一个‘张三’能登录,从而阻止用户‘张三’利用两个不同的session进入我们的web应用中,为此spring security为我们提供了以下两种策略实现这个功能: 当同样的用户再次登录的时候,就将前一次登录过的session信息自动设置成过期 直接报出一个错误,提示用户已经登录,从而阻止本次登录 注意:当采用第二种方式时,如果一个用户没有明确的执行logout(例如用户直接关闭了浏览器),在这个用户的session没有过期前,他将不能再次登录系统 本示例采用第一种策略,设置最大并发登录次数为1 ...
前言:   在日常应用的权限系统中,一个角色包含其他角色是一个很常见的需求。例如,在一个应用中如果有两个角色 admin和user,我们会希望所有user用户能做的事admin用户都可以做。为了实现这样的功能,我们可以把所有需要user用户访问的资源再赋一遍权限给admin用户,但是当我们的应用系统中有很多的角色时,这样的设计将变的极其复杂。所以srpng给我们提供了另一种实现方式,让我们很容易的可以把一种角色的权限赋给了另一角色。 环境:   spring-boot 版本:1.5.4.RELEASE 1.项目结构 2.配置类SecurityConfig.java /** * ...
前言:   本篇文章简单介绍spring-security给我们提供的remember me功能的使用方法,参数名、配置方式采用spring默认配置,后续章节进一步探讨时会详细说明自定义的方式。 环境:   spring boot 版本:1.5.4.RELEASE 1.项目结构 application.yml文件是放在src/main/resources/目录下 2.配置类SecurityConfig.java /** * */ package nariis.chengf.security.samples.javaconfig.remeberme; import ...
前言   本篇文章我们举例说明在spring-security中利用mysql来存储用户信息和权限信息,示例采用security默认提供的DDL。 环境:   spring-boot版本:1.5.4.RELEASE 1.项目工程结构 2.配置类SecurityConfig.java /** * */ package nariis.chengf.security.samples.javaconfig.jdbc; import javax.sql.DataSource; import org.springframework.beans.factory.anno ...
前言   这一节,我们会用一个最简单的示例来展示spring security的魅力,通过这个示例我们会发现和spring boot相结合,实现应用的安全控制这个复杂功能竟会如此简单 环境:   spring-boot版本号:1.5.4.RELEASE 1.示例项目结构 2.配置类SecurityConfig.java /** * */ package nariis.chengf.security.samples.javaconfig.helloworld; import org.springframework.context.annotation.Bean; imp ...
前言   在上一篇文章中通过对EnableWebSecurity注解中的配置类WebSecurityConfiguration的探讨,我们知道了filter各种各样的filter以及鉴权用的AccessDecisionManager是怎么加载进来的,但是具体用来认证的AuthenticationManager怎么加载还没有说明,这篇文章,我们就重点分析下各种各样的AuthenticationManager是怎么加载的。   通过上一篇我们知道EnableWebSecurity这个注解除了引入WebSecurityConfiguration这个配置类外,还引入了EnableGlobalAuthen ...
前言:   spring security给我们提供了功能非常强大的安全保护机制,在使用时的配置也极其简单,在和spring boot工程集成的时候,简单到只需要我们用一个注解@EnableWebSecurity就可以把需要的过滤器都配置好,可是这一切是怎么发生的呢?在本系列文章的第一篇就让我们结合源码来一探究竟。 环境:   spring boot 版本:1.5.4.RELEASE   1.@EnableWebSecurity注解 @Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) @Target(valu ...
1.问题概述 最近在项目中遇到一个问题,因为业务要求,需要在服务中获取到客户端IP,但是在项目开发部署过程中发现利用java -jar ***.jar单独运行服务,或者打成镜像再docker run启动的服务都可以正确的获取到client IP,但是当采用docker stack deploy发布到docker swarm集群的时候,服务却获取不到正确的client IP了,得到的都是10.255.0.* 这样的IP,因为业务逻辑必须获取正确的client IP,所以有了下面的这个调查。 系统框架:spring boot、spring cloud、docker、docker swarm spri ...
Global site tag (gtag.js) - Google Analytics