Spring Security

详解Spring Security的HttpBasic登录验证模式

穿精又带淫゛_ 提交于 2019-12-04 13:23:02
一、HttpBasic模式的应用场景 HttpBasic登录验证模式是Spring Security实现登录验证最简单的一种方式,也可以说是最简陋的一种方式。它的目的并不是保障登录验证的绝对安全,而是提供一种“防君子不防小人”的登录验证。 就好像是我小时候写日记,都买一个带小锁头的日记本,实际上这个小锁头有什么用呢?如果真正想看的人用一根钉子都能撬开。它的作用就是:某天你的父母想偷看你的日记,拿出来一看还带把锁,那就算了吧,怪麻烦的。 举一个我使用HttpBasic模式的进行登录验证的例子:我曾经在一个公司担任部门经理期间,开发了一套用于统计效率、分享知识、生成代码、导出报表的Http接口。纯粹是为了工作中提高效率,同时我又有一点点小私心,毕竟各部之间是有竞争的,所以我给这套接口加上了HttpBasic验证。公司里随便一个技术人员,最多只要给上一两个小时,就可以把这个验证破解了。说白了,这个工具的数据不那么重要,加一道锁的目的就是不让它成为公开数据。如果有心人破解了,真想看看这里面的数据,其实也无妨。这就是HttpBasic模式的典型应用场景。 二、spring boot2.0整合Spring security spring boot 2,x版本maven方式引入Spring security坐标。 <dependency> <groupid>org.springframework

Spring Security 实战干货:基于配置的接口角色访问控制

此生再无相见时 提交于 2019-12-04 10:30:27
1. 前言 欢迎阅读 Spring Security 实战干货 系列文章 。对于受限的访问资源,并不是对所有认证通过的用户开放的。比如 A 用户的角色是会计,那么他就可以访问财务相关的资源。 B 用户是人事,那么他只能访问人事相关的资源。我们在 一文中也对基于角色的访问控制的相关概念进行了探讨。在实际开发中我们如何对资源进行角色粒度的管控呢?今天我来告诉你 Spring Security 是如何来解决这个问题的。 2. 将角色写入 UserDetails 我们使用 UserDetailsService 的 `` 加载 UserDetails 时也会把用户的 GrantedAuthority 权限集写入其中。你可以将角色持久化并在这个点进行注入然后配置访问策略,后续的问题交给 Spring Security 。 3. 在 HttpSecurity 中进行配置角色访问控制 我们可以通过配置 WebSecurityConfigurerAdapter 中的 HttpSecurity 来控制接口的角色访问。 3.1 通过判断用户是否持有角色来进行访问控制 httpSecurity.authorizeRequests().antMatchers("/foo/test").hasRole("ADMIN") 表示 持有 ROLE_ADMIN 角色的用户才能访问 /foo/test 接口。注意:

web应用安全框架选型:Spring Security与Apache Shiro

岁酱吖の 提交于 2019-12-04 10:26:50
一、 SpringSecurity 框架简介 官网: https://projects.spring.io/spring-security/ 源代码: https://github.com/spring-projects/spring-security/ Spring Security 是强大的,且容易定制的,基于Spring开发的实现认证登录与资源授权的应用安全框架。 SpringSecurity 的核心功能: Authentication:认证,用户登陆的验证(解决你是谁的问题) Authorization:授权,授权系统资源的访问权限(解决你能干什么的问题) 安全防护,防止跨站请求,session 攻击等 二、比较一下shiro与Spring Security 目前在java web应用安全框架中,与Spring Security形成直接竞争的就是shiro,二者在核心功能上几乎差不多,但从使用的角度各有优缺点。笔者认为:没有最好的,只有最合适的。 2.1 用户量 从使用情况上看,二者都在逐步提高使用量。shiro的使用量一直高于spring security. 2.2.使用的方便程度 通常来说,shiro入门更加容易,使用起来也非常简单,这也是造成shiro的使用量一直高于Spring Security的主要原因。但是从笔者的角度来看,二者其实都简单,我说说我的理由:

SpringSecurity代码实现JWT接口权限授予与校验

眉间皱痕 提交于 2019-12-04 10:10:11
通过笔者前两篇文章的说明,相信大家已经知道JWT是什么,怎么用,该如何结合Spring Security使用。那么本节就用代码来具体的实现一下JWT登录认证及鉴权的流程。 一、环境准备工作 建立Spring Boot项目并集成了Spring Security,项目可以正常启动 通过controller写一个HTTP的GET方法服务接口,比如:“/hello” 实现最基本的动态数据验证及权限分配,即实现UserDetailsService接口和UserDetails接口。这两个接口都是向Spring Security提供用户、角色、权限等校验信息的接口 如果你学习过Spring Security的formLogin登录模式,请将HttpSecurity配置中的formLogin()配置段全部去掉。因为JWT完全使用JSON接口,没有from表单提交。 HttpSecurity配置中一定要加上csrf().disable(),即暂时关掉跨站攻击CSRF的防御。这样是不安全的,我们后续章节再做处理。 以上的内容,我们在之前的文章中都已经讲过。如果仍然不熟悉,可以翻看本号之前的文章。 二、开发JWT工具类 通过maven坐标引入JWT工具包jjwt <dependency> <groupid>io.jsonwebtoken</groupid> <artifactid>jjwt<

SpringSecurity代码实现JWT接口权限授予与校验

本秂侑毒 提交于 2019-12-04 09:55:25
通过笔者前两篇文章的说明,相信大家已经知道JWT是什么,怎么用,该如何结合Spring Security使用。那么本节就用代码来具体的实现一下JWT登录认证及鉴权的流程。 一、环境准备工作 建立Spring Boot项目并集成了Spring Security,项目可以正常启动 通过controller写一个HTTP的GET方法服务接口,比如:“/hello” 实现最基本的动态数据验证及权限分配,即实现UserDetailsService接口和UserDetails接口。这两个接口都是向Spring Security提供用户、角色、权限等校验信息的接口 如果你学习过Spring Security的formLogin登录模式,请将HttpSecurity配置中的formLogin()配置段全部去掉。因为JWT完全使用JSON接口,没有from表单提交。 HttpSecurity配置中一定要加上csrf().disable(),即暂时关掉跨站攻击CSRF的防御。这样是不安全的,我们后续章节再做处理。 以上的内容,我们在之前的文章中都已经讲过。如果仍然不熟悉,可以翻看本号之前的文章。 二、开发JWT工具类 通过maven坐标引入JWT工具包jjwt <dependency> <groupid>io.jsonwebtoken</groupid> <artifactid>jjwt<

Spring Security Architecture

给你一囗甜甜゛ 提交于 2019-12-04 09:54:03
This guide is a primer for Spring Security, offering insight into the design and basic building blocks of the framework. We only cover the very basics of application security but in doing so we can clear up some of the confusion experienced by developers using Spring Security. To do this we take a look at the way security is applied in web applications using filters and more generally using method annotations. Use this guide when you need to understand at a high level how a secure application works, and how it can be customized, or if you just need to learn how to think about application

Api架构奥义:ApiBoot实现零代码整合Spring Security & OAuth2

半世苍凉 提交于 2019-12-04 06:42:52
接口服务的安全性一直是程序员比较注重的一个问题,成熟的安全框架也比较多,其中一个组合就是 Spring Security 与 OAuth2 的整合,在 ApiBoot 内通过代码的封装、自动化配置实现了自动化整合这两大安全框架。 博客原文: http://blog.yuqiyu.com/apiboot-security-oauth-zero-code-integration.html ApiBoot Security OAuth简介 ApiBoot Security OAuth 是 ApiBoot 开源项目内的一个组件,内部通过 SpringBoot AutoConfiguration 整合了 Spring Security 、 OAuth2 ,而且支持多种存储方式,如: 内存(memory) 、 数据库(jdbc) 、 Redis 等,使用配置文件的方式来 代替 代码侵入式集成方式,提高开发效率、减少非业务的繁琐代码,而且还有这比较高的可扩展性。 ApiBoot 源码(源码详见:api-boot-plugins、api-boot-autoconfigure目录): https://gitee.com/minbox-projects/api-boot ApiBoot Security使用文档: http://apiboot.minbox.io/zh-cn/docs/api-boot

Springsecurity之SwitchUserFilter切换用户

回眸只為那壹抹淺笑 提交于 2019-12-03 23:34:09
使用的版本是Springsecurity的4.2.x版本。 业务场景是这样的,系统中存在很多用户,超级管理员要有个功能,就是可以切换用户,比如超级管理员,可以切换为系统中的任何一个用户。Spingsecurity提供了一个SwitchUserFilter,我们就用这个来实现功能。 1、先来看怎么使用 List-1.1 <bean id="switchUserFilter" class="org.springframework.security.web.authentication.switchuser.SwitchUserFilter"> <property name="userDetailsService" ref="userService"/> <property name="usernameParameter" value="userNo"/> <property name="switchUserUrl" value="/switch/user"/> </bean> 定义switchUserFilter这个bean,如下List-1所示。用过Springsecurity的,应该知道UserDetailsService,这里就不再细讲。 usernameParameter的值是userNo,会从HttpServletRequest中获取key为userNo的值

精通Spring Boot—— 第二十篇:Spring Security记住我功能

给你一囗甜甜゛ 提交于 2019-12-03 14:30:33
引言 本章的代码实现是在上一篇教程: 精通Spring Boot——第十九篇:Spring Security 整合验证码登录 基础上,如果感觉本篇跳跃幅度较大,可先阅读上一篇,或访问我的github.com(文末会附上地址),下载源码阅读。 1.基本原理介绍 Spring Security记住我功能的基本原理: 首先当我们的浏览器发送请求到UsernamePasswordAuthenticationFilter时,如果认证成功的话,会调用一个RememberMeService服务, 在RememberMeService中,存在一个TokenRepository,它会将token写入到浏览器的cookie中,并将token同时写入到数据库。当用户在下一次重新登录时,服务请求会经过RememberMeAuthentionFilter,这个filter会读取浏览器Cookie中的token,然后再传递给RememberMeService, RememberMeService再去数据库中查询该token是否有效,若该token有效,则会取出对应的用户名,再去调用UserDetailsService获取用户信息,再将用户信息放入SecurityContext里面。 ---图片来源网络 RememberMeAuthentionFilter在Spring

学习Spring-security(1)

会有一股神秘感。 提交于 2019-12-03 01:34:48
注:我写这系列文章主要是记录我的搭建一些心得,以及代码。 Spring-Security是Spring提供的一整套完整的权限控制机制,比较简单粗暴,直接通过配置文件的配置 直接来判断你是Pass or Out。而不用传统的去发送请求给后台代码,后台代码查询数据库,判断是否有访问资源的权限,然后返回结果。还有一点就是Spring-Security可以直接在内存层面进行过滤 Spring-Security环境的搭建。 这里我使用的是MyEclipse 9.0M1+JDK1.7+tomcat 6.0 先下载Maven以及Tomcat的对应的文件 下载Maven链接: http://maven.apache.org/download.cgi 下载Tomcat链接: http://tomcat.apache.org/ 然后配置Myeclipse 使用下载的Maven window-》prefrences-》maven-》user setting 中配置User Settings (apache-maven-3.3.9\conf\settings.xml) window-》prefrences-》maven-》installations 中加入Maven主目录 配置Tomcat/conf/tomcat_users.xml,增加一个超级用户 <role rolename="admin-gui"/