Spring Security

SpringSecurity环境下配置CORS跨站资源共享规则

偶尔善良 提交于 2019-12-05 08:25:15
一、CORS简述 要说明CORS(Cross Origin Resourse-Sharing) 跨站资源共享,就必须先说同源策略。长话短说,同源策略就是向服务端发起请求的时候,以下三项必须与当前浏览器应用一致:域名、端口、协议。用白话说:就是你的应用发送请求不能访问别人的资源,否则浏览器就会限制你。当然也有例外,如:img、srcipt、iframe等资源引用的HTML标签不受同源策略的限制。 但是我们实际开发中又经常会跨站访问,比如前后端分离的应用是分开部署的,在浏览器看来是两个域。所以同源策略是用来禁止跨域访问的,CORS正好相反是根据自己的需求与规则,有限的开放部分资源的共享。 二、Spring-CORS规则基础配置 想在Spring或Spring Boot的web环境下实现跨域资源共享,主要有三种实现方式: @CrossOrigin注解,这个注解是作用于Controller类或者请求方法上的,实现局部接口的跨域资源共享。 实现WebMvcConfigurer接口addCorsMappings方法,实现全局配置的跨域资源共享。 注入CorsFilter过滤器,实现全局配置的跨域资源共享。推荐使用。 这三种实现方式在我的另外一篇文章 《SpringBoot解决跨域访问的问题》 中已经介绍过,这里就不多做说明了。 三、Spring Security 中的配置CORS

结合Spring Security进行web应用会话安全管理

只谈情不闲聊 提交于 2019-12-05 06:04:06
在本文中,将为大家说明如何结合Spring Security 和Spring Session管理web应用的会话。 一、Spring Security创建使用session的方法 Spring Security提供4种方式精确的控制会话的创建: always :如果当前请求没有session存在,Spring Security创建一个session。 ifRequired(默认) : Spring Security在需要时才创建session never : Spring Security将永远不会主动创建session,但是如果session已经存在,它将使用该session stateless :Spring Security不会创建或使用任何session。适合于接口型的无状态应用,该方式节省资源。 在Spring Security配置中加入session创建的策略。继承WebSecurityConfigurerAdapter ,重写configure(HttpSecurity http) 方法 @Override protected void configure(HttpSecurity http) throws Exception { http.sessionManagement() .sessionCreationPolicy(

Spring security笔记1/4: 第一个 SpringSecurity 应用

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-05 04:54:45
第一个 SpringSecurity 应用 Spring Security 官方介绍 https://spring.io/projects/spring-security#learn Spring Security 目标是解决 “你是谁?”、“你能做什么?”两个问题。 实现步骤 1. 创建目录结构 |____spring-security-learn-1 | |____build.gradle | |____src | | |____main | | | |____java | | | |____resources 2. 创建文件 build.gradle 重点引入 spring-boot-starter-security 依赖项,完整的 gradle 配置如下: plugins { id 'java' id "io.spring.dependency-management" version "1.0.8.RELEASE" } group 'net.txt100.learn' version '1.0' sourceCompatibility = 1.8 apply plugin: 'application' mainClassName = 'net.txt100.learn.springsecurity.base.case1.Case1Application'

使用Spring安全表达式控制系统功能访问权限

Deadly 提交于 2019-12-05 03:44:11
一、SPEL表达式权限控制 从 spring security 3.0 开始已经可以使用 spring Expression 表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式函数 描述 hasRole([role] ) 用户拥有指定的角色时返回true ( Spring security 默认会带有 ROLE_ 前缀),去除前缀参考 Remove the ROLE_ hasAnyRole([role1,role2]) 用户拥有任意一个指定的角色时返回true hasAuthority([authority]) 拥有某资源的访问权限时返回true hasAnyAuthority([auth1,auth2]) 拥有某些资源其中部分资源的访问权限时返回true permitAll 永远返回true denyAll 永远返回false anonymous 当前用户是 anonymous 时返回true rememberMe 当前用户是 rememberMe 用户返回true authentication 当前登录用户的 authentication 对象 fullAuthenticated 当前用户既不是 anonymous 也不是 rememberMe

SpringSecurity系列之自定义登录验证成功与失败的结果处理

落花浮王杯 提交于 2019-12-05 01:41:21
一、需要自定义登录结果的场景 在我之前的文章中,做过登录验证流程的源码解析。其中比较重要的就是 当我们登录成功的时候,是由AuthenticationSuccessHandler进行登录结果处理,默认跳转到defaultSuccessUrl配置的路径对应的资源页面(一般是首页index.html)。 当我们登录失败的时候,是由AuthenticationfailureHandler进行登录结果处理,默认跳转到failureUrl配置的路径对应的资源页面(一般是登录页login.html)。 但是在web应用开发过程中需求是千变万化的,有时需要我们针对登录结果做个性化处理,比如: 我们希望不同的人登陆之后,看到不同的首页 我们应用是前后端分离的,验证响应结果是JSON格式数据,而不是页面跳转 以上的这些情况,使用Spring Security作为安全框架的时候,都需要我们使用本节学到的知识进行自定义的登录验证结果处理。 二、自定义登陆成功的结果处理 为了满足上面的需求,我们该如何去做呢?下面一小节我们来说明一下。AuthenticationSuccessHandler接口是Security提供的认证成功处理器接口,我们只需要去实现它即可。但是通常来说,我们不会直接去实现AuthenticationSuccessHandler接口

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

你。 提交于 2019-12-04 21:51:46
1. 前言 欢迎阅读 Spring Security 实战干货 系列文章 。在上一篇 基于配置的接口角色访问控制 我们讲解了如何通过 javaConfig 的方式配置接口的角色访问控制。其实还有一种更加灵活的配置方式 基于注解 。今天我们就来探讨一下。DEMO 获取方式在文末。 2. Spring Security 方法安全 Spring Security 基于注解的安全认证是通过在相关的方法上进行安全注解标记来实现的。 2.1 开启全局方法安全 我们可以在任何 @Configuration 实例上使用 @EnableGlobalMethodSecurity 注解来启用全局方法安全注解功能。该注解提供了三种不同的机制来实现同一种功能,所以我们单独开一章进行探讨。 3. @EnableGlobalMethodSecurity 注解 @Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) @Target(value = { java.lang.annotation.ElementType.TYPE }) @Documented @Import({ GlobalMethodSecuritySelector.class }) @EnableGlobalAuthentication @Configuration

精通Spring Boot——第十六篇:初探Spring Security,使用Http Basic认证

做~自己de王妃 提交于 2019-12-04 17:02:21
说明 本文以及接下来有关spring security 的文章, 基于Spring Boot 2.1.0 RELEASE , Spring Security 5.1.2RELEASE 简单介绍Spring Security Spring Security是当今非常流行的,基于Spring提供了一套Web安全性的完整框架。用于对用户进行认证(Authentication)和授权(Authorization)。在用户认证方面,Spring Security 支持主流的验证方式,包括,HttpBasic认证,Http表单认证,Http摘要认证,OpenId以及LDAP(轻量目录访问协议:Lightweight Directory Access Protocol)等。在用户授权方面,Spring Security 提供了基于角色的访问控制和访问控制列表(Access Control List,ACL),可以对应用中的领域对象进行细粒度的控制。 本文将通过介绍如何在Spring Boot项目中使用Spring Security保护应用,我们先讨论如何自定义用户的认证逻辑,通过Spring Security 提供的UserDetailService,User对象,密码加密PasswordEncoder来初步认识Spring Security。 初探:用httpBasic认证 Spring

Spring Security总结

假装没事ソ 提交于 2019-12-04 17:02:09
简介 Spring Security是一个强大的和高度可定制的身份验证和访问控制框架,它的前身是 Acegi Security 。Spring Security着重于为Java应用程序提供身份验证和授权。提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。 官网: https://spring.io/projects/spring-security github: https://github.com/spring-projects/spring-security 核心概念 Spring Security是如何完成身份认证的? 用户名和密码被过滤器获取到,封装成Authentication,通常情况下是UsernamePasswordAuthenticationToken这个实现类。 AuthenticationManager 身份管理器负责验证这个Authentication 认证成功后,AuthenticationManager身份管理器返回一个被填充满了信息的(包括上面提到的权限信息,身份信息,细节信息,但密码通常会被移除)Authentication实例。

详解Spring Security的formLogin登录认证模式

瘦欲@ 提交于 2019-12-04 16:32:44
一、formLogin的应用场景 在本专栏之前的文章中,已经给大家介绍过Spring Security的HttpBasic模式,该模式比较简单,只是进行了通过携带Http的Header进行简单的登录验证,而且没有定制的登录页面,所以使用场景比较窄。 对于一个完整的应用系统,与登录验证相关的页面都是高度定制化的,非常美观而且提供多种登录方式。这就需要Spring Security支持我们自己定制登录页面,也就是本文给大家介绍的formLogin模式登录认证模式。 准备工作 新建一个Spring Boot 的web应用,引入Spring Security Starter。 准备一个login.html登录页面,页面内容非常简单,一个from表单、用户名和密码输入框,一个提交按钮 准备一个首页index.html,在登录成功之后需要进入index.html首页 首页可以看到syslog(日志管理)、sysuer(用户管理)、biz1(业务一)、biz2(业务二)四个页面超文本链接选项。通过controller控制层跳转页面,并在对应页面写一些标志性文字即可,不需写具体业务。 需求 我们希望biz1(业务一)、biz2(业务二)普通的操作用户user就可以访问 我们希望管理员可以访问包括syslog(日志管理)和sysuser(用户管理)在内的所有资源

看完这篇文章你还感觉SpringSecurity整合OAuth2自定义查询用户复杂吗?

二次信任 提交于 2019-12-04 15:13:09
SpringSecurity 整合 OAuth2 是开发者公认的 资源保护 、 服务认证 的最佳搭配伙伴,这对好基友一直在默默的守护着应用服务的安全,根据访问者的不同角色可以颗粒度控制到具体的接口,从而实现权限的细微划分。 而 SpringSecurity 框架在安全框架的队伍中算是入门比较高的,虽然 Spring 通过 SpringBoot 进行了封装,但是使用起来还是有很多容易遗漏的配置,因为配置比较多,让初学者理解起来也比较困难,针对这个问题 ApiBoot 对 SpringSecurity 以及 OAuth2 进行了封装,在基础上极大的简化了配置(只做简化、增强, SpringSecurity 的基础语法、配置还可以正常使用) ApiBoot Security 系列文章 ApiBoot实现零代码整合Spring Security & OAuth2 ApiBoot零代码整合Spring Security的JDBC方式获取AccessToken 创建项目 使用 IDEA 开发工具创建一个 SpringBoot 项目。 ApiBoot 的底层是 SpringBoot ,而且 ApiBoot 为了支持 SpringBoot 的 2.2.x 分支,也对应的创建了 2.2.x 分支版本。 添加ApiBoot统一依赖 创建完项目后我们需要在 pom.xml 添加 ApiBoot