Spring Security

Spring Security

如何自定义springsecurity OAuth 2的异常返回信息

回复

Spring BootkaysonYang 发起了问题 • 3 人关注 • 0 个回复 • 441 次浏览 • 2017-06-09 18:13 • 来自相关话题

【视频教程】Spring Security 实现 QQ 登录

视频公开课anoy 发表了文章 • 1 个评论 • 573 次浏览 • 2017-07-19 13:53 • 来自相关话题

周末休息时,录的视频教程,因为是第一次录,做得不好的地方还请大家热心指正!


 
原文地址:https://www.ictgu.cn/share/1c69465d
  查看全部
周末休息时,录的视频教程,因为是第一次录,做得不好的地方还请大家热心指正!



 
原文地址:https://www.ictgu.cn/share/1c69465d
 

spring boot 学习系列

开源项目hong 发表了文章 • 8 个评论 • 1848 次浏览 • 2017-06-21 09:35 • 来自相关话题

学习记录 https://github.com/t-hong/springboot-examples 

spring boot 学习系列 (使用版本 1.5.3) 
1.chapter1> springboot hello world. 2.chapter2> 配置文件详解:自定义属性、随机数、多环境配置等(目前只使用properties,后续添加yml的配置方式用法) 3.chapter3> spring boot 构建restful api以及单元测试,替换默认json 解析框架,使用fastjson 4.chapter3-jersey> springboot 整合jersey 实现restful. 5.chapter4-thymeleaf> spring boot 国际化相关处理和thymeleaf 模板语法的基本使用 6.chapter4-freemarker> 使用freemarker模板引擎 7.chapter4-jsp> spring boot 对jsp 的支持 8.chapter4-velocity> spring boot 使用velocity 版本情况说明 9.chapter5-swagger> spring boot 使用swagger构建restful api10.chapter6-handle-exception> spring boot 统一异常处理(返回异常对象json 或者modelandview) 11.chapter6-servlet> spring boot 下使用servlet、filter、listener以及springmvc interceptor 的相关处理. 12.chapter6-aop-log> spring boot log4j 使用aop方式添加日志. 13.chapter7-jdbctemplate> spring boot 整合jdbctemplate 操作数据库. 14.chapter7-spring-data-jpa> spring boot 整合spring data jpa ,简化数据库操作 15.chapter7-mybatis> spring boot 整合mybatis 使用,提供两种方式:xml 和annotation的方式。16.chapter7-mybatis-mapper-plugin> spring boot 整合mybatis 第三方mapper 插件、mybatis自动生成工具 generator 简化开发. 17.chapter8-jdbctemplate-mutil-datasource> spring boot 整合jdbctemplate 多数据源 18.chapter8-jpa-mutil-datasource> spring boot 整合spring data jpa 多数据源 19.chapter8-mybatis-mutil-datasource> spring boot 使用druid 数据源 整合mybatis 多数据源 20.chapter9-redis> spring boot 整合redis 21.chapter9-redis-cache> spring boot 使用redis 作为缓存实例 22.chapter9-redis-cluster> 添加了注释说明了JedisCluster 与RedisTemplate 操作RedisCluster 的一些使用原理 . 23.chapter9-redis-session> spring boot 整合Redis . 24.chapter10-shiro> spring boot 整合shiro 基本实例 25.chapter10-jwt> spring boot 整合jwt 实现token 认证. 26.chapter10-security> spring boot 整合security 实现简单权限控制. 27.chapter10-security-jwt> spring boot security token 整合实现认证登陆. 28.chapter11-caching-ehcache> spring boot框架缓存系列 ehcache . 29.chapter12-rocketmq> spring boot 整合rocketmq 测试. 查看全部
学习记录 https://github.com/t-hong/springboot-examples 

spring boot 学习系列 (使用版本 1.5.3) 
  • 1.chapter1> springboot hello world. 
  • 2.chapter2> 配置文件详解:自定义属性、随机数、多环境配置等(目前只使用properties,后续添加yml的配置方式用法) 
  • 3.chapter3> spring boot 构建restful api以及单元测试,替换默认json 解析框架,使用fastjson 
  • 4.chapter3-jersey> springboot 整合jersey 实现restful. 
  • 5.chapter4-thymeleaf> spring boot 国际化相关处理和thymeleaf 模板语法的基本使用 
  • 6.chapter4-freemarker> 使用freemarker模板引擎 
  • 7.chapter4-jsp> spring boot 对jsp 的支持 
  • 8.chapter4-velocity> spring boot 使用velocity 版本情况说明 
  • 9.chapter5-swagger> spring boot 使用swagger构建restful api
  • 10.chapter6-handle-exception> spring boot 统一异常处理(返回异常对象json 或者modelandview) 
  • 11.chapter6-servlet> spring boot 下使用servlet、filter、listener以及springmvc interceptor 的相关处理. 
  • 12.chapter6-aop-log> spring boot log4j 使用aop方式添加日志. 
  • 13.chapter7-jdbctemplate> spring boot 整合jdbctemplate 操作数据库. 
  • 14.chapter7-spring-data-jpa> spring boot 整合spring data jpa ,简化数据库操作 
  • 15.chapter7-mybatis> spring boot 整合mybatis 使用,提供两种方式:xml 和annotation的方式。
  • 16.chapter7-mybatis-mapper-plugin> spring boot 整合mybatis 第三方mapper 插件、mybatis自动生成工具 generator 简化开发. 
  • 17.chapter8-jdbctemplate-mutil-datasource> spring boot 整合jdbctemplate 多数据源 
  • 18.chapter8-jpa-mutil-datasource> spring boot 整合spring data jpa 多数据源 
  • 19.chapter8-mybatis-mutil-datasource> spring boot 使用druid 数据源 整合mybatis 多数据源 
  • 20.chapter9-redis> spring boot 整合redis 
  • 21.chapter9-redis-cache> spring boot 使用redis 作为缓存实例 
  • 22.chapter9-redis-cluster> 添加了注释说明了JedisCluster 与RedisTemplate 操作RedisCluster 的一些使用原理 . 
  • 23.chapter9-redis-session> spring boot 整合Redis . 
  • 24.chapter10-shiro> spring boot 整合shiro 基本实例 
  • 25.chapter10-jwt> spring boot 整合jwt 实现token 认证. 
  • 26.chapter10-security> spring boot 整合security 实现简单权限控制. 
  • 27.chapter10-security-jwt> spring boot security token 整合实现认证登陆. 
  • 28.chapter11-caching-ehcache> spring boot框架缓存系列 ehcache . 
  • 29.chapter12-rocketmq> spring boot 整合rocketmq 测试.

Spring Security 入门:登录与退出

Spring Securityanoy 发表了文章 • 4 个评论 • 1429 次浏览 • 2017-06-10 19:02 • 来自相关话题

前言

Spring Security 比较复杂,愿与各位一起研究使用,有歧义的地方,欢迎指出,谢谢!

Github 地址

https://github.com/ChinaSilenc ... y.git
本文示例地址:https://github.com/ChinaSilenc ... no-db

启动应用

1、clone 代码之后,进入 目录,启动应用
 
$(document).ready(function() {$('pre code').each(function(i, block) { hljs.highlightBlock( block); }); });mvn spring-boot:run
2、demo 演示,地址:http://localhost:8080 账号 anoy 密码 pwd
 

 
相关解释说明
注解 @EnableWebSecurity

在 Spring boot 应用中使用 Spring Security,用到了 @EnableWebSecurity注解,官方说明如下:
/**
* Add this annotation to an {@code @Configuration} class to have the Spring Security
* configuration defined in any {@link WebSecurityConfigurer} or more likely by extending
* the {@link WebSecurityConfigurerAdapter} base class and overriding individual methods:
*/
意思是说, 该注解和 @Configuration 注解一起使用, 注解 WebSecurityConfigurer 类型的类,或者利用@EnableWebSecurity 注解继承 WebSecurityConfigurerAdapter的类,这样就构成了 Spring Security 的配置。
 
抽象类 WebSecurityConfigurerAdapter

一般情况,会选择继承 WebSecurityConfigurerAdapter 类,其官方说明如下:/**
* Provides a convenient base class for creating a {@link WebSecurityConfigurer}
* instance. The implementation allows customization by overriding methods.
*
* <p>
* Will automatically apply the result of looking up
* {@link AbstractHttpConfigurer} from {@link SpringFactoriesLoader} to allow
* developers to extend the defaults.
* To do this, you must create a class that extends AbstractHttpConfigurer and then create a file in the classpath at "META-INF/spring.factories" that looks something like:
* </p>
* <pre>
* org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer = sample.MyClassThatExtendsAbstractHttpConfigurer
* </pre>
* If you have multiple classes that should be added you can use "," to separate the values. For example:
*
* <pre>
* org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer = sample.MyClassThatExtendsAbstractHttpConfigurer, sample.OtherThatExtendsAbstractHttpConfigurer
* </pre>
*
*/
意思是说 WebSecurityConfigurerAdapter 提供了一种便利的方式去创建 WebSecurityConfigurer的实例,只需要重写 WebSecurityConfigurerAdapter 的方法,即可配置拦截什么URL、设置什么权限等安全控制。

方法 configure(AuthenticationManagerBuilder auth) 和 configure(HttpSecurity http)

Demo 中重写了 WebSecurityConfigurerAdapter 的两个方法:
 
/**
* 通过 {@link #authenticationManager()} 方法的默认实现尝试获取一个 {@link AuthenticationManager}.
* 如果被复写, 应该使用{@link AuthenticationManagerBuilder} 来指定 {@link AuthenticationManager}.
*
* 例如, 可以使用以下配置在内存中进行注册公开内存的身份验证{@link UserDetailsService}:
*
* // 在内存中添加 user 和 admin 用户
* @Override
* protected void configure(AuthenticationManagerBuilder auth) {
* auth
* .inMemoryAuthentication().withUser("user").password("password").roles("USER").and()
* .withUser("admin").password("password").roles("USER", "ADMIN");
* }
*
* // 将 UserDetailsService 显示为 Bean
* @Bean
* @Override
* public UserDetailsService userDetailsServiceBean() throws Exception {
* return super.userDetailsServiceBean();
* }
*
*/
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
this.disableLocalConfigureAuthenticationBldr = true;
}
/**
* 复写这个方法来配置 {@link HttpSecurity}.
* 通常,子类不能通过调用 super 来调用此方法,因为它可能会覆盖其配置。 默认配置为:
*
* http.authorizeRequests().anyRequest().authenticated().and().formLogin().and().httpBasic();
*
*/
protected void configure(HttpSecurity http) throws Exception {
logger.debug("Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity).");

http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin().and()
.httpBasic();
}
类 AuthenticationManagerBuilder
 
 
/**
* {@link SecurityBuilder} used to create an {@link AuthenticationManager}. Allows for
* easily building in memory authentication, LDAP authentication, JDBC based
* authentication, adding {@link UserDetailsService}, and adding
* {@link AuthenticationProvider}'s.
*/
意思是,AuthenticationManagerBuilder 用于创建一个 AuthenticationManager,让我能够轻松的实现内存验证、LADP验证、基于JDBC的验证、添加UserDetailsService、添加AuthenticationProvider。
 
其他

如需转载,请联系作者,邮箱 545544032@qq.com 开源社区 http://spring4all.com 欢迎你
 
原文地址: http://www.jianshu.com/p/a8e317e82425
  查看全部
前言

Spring Security 比较复杂,愿与各位一起研究使用,有歧义的地方,欢迎指出,谢谢!

Github 地址

https://github.com/ChinaSilenc ... y.git
本文示例地址:https://github.com/ChinaSilenc ... no-db

启动应用

1、clone 代码之后,进入 目录,启动应用
 
mvn spring-boot:run

2、demo 演示,地址:http://localhost:8080 账号 anoy 密码 pwd
 

 
相关解释说明
注解 @EnableWebSecurity

在 Spring boot 应用中使用 Spring Security,用到了 @EnableWebSecurity注解,官方说明如下:
/**
* Add this annotation to an {@code @Configuration} class to have the Spring Security
* configuration defined in any {@link WebSecurityConfigurer} or more likely by extending
* the {@link WebSecurityConfigurerAdapter} base class and overriding individual methods:
*/

意思是说, 该注解和 @Configuration 注解一起使用, 注解 WebSecurityConfigurer 类型的类,或者利用@EnableWebSecurity 注解继承 WebSecurityConfigurerAdapter的类,这样就构成了 Spring Security 的配置。
 
抽象类 WebSecurityConfigurerAdapter

一般情况,会选择继承 WebSecurityConfigurerAdapter 类,其官方说明如下:
/**
* Provides a convenient base class for creating a {@link WebSecurityConfigurer}
* instance. The implementation allows customization by overriding methods.
*
* <p>
* Will automatically apply the result of looking up
* {@link AbstractHttpConfigurer} from {@link SpringFactoriesLoader} to allow
* developers to extend the defaults.
* To do this, you must create a class that extends AbstractHttpConfigurer and then create a file in the classpath at "META-INF/spring.factories" that looks something like:
* </p>
* <pre>
* org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer = sample.MyClassThatExtendsAbstractHttpConfigurer
* </pre>
* If you have multiple classes that should be added you can use "," to separate the values. For example:
*
* <pre>
* org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer = sample.MyClassThatExtendsAbstractHttpConfigurer, sample.OtherThatExtendsAbstractHttpConfigurer
* </pre>
*
*/

意思是说 WebSecurityConfigurerAdapter 提供了一种便利的方式去创建 WebSecurityConfigurer的实例,只需要重写 WebSecurityConfigurerAdapter 的方法,即可配置拦截什么URL、设置什么权限等安全控制。

方法 configure(AuthenticationManagerBuilder auth) 和 configure(HttpSecurity http)

Demo 中重写了 WebSecurityConfigurerAdapter 的两个方法:
 
   /**
* 通过 {@link #authenticationManager()} 方法的默认实现尝试获取一个 {@link AuthenticationManager}.
* 如果被复写, 应该使用{@link AuthenticationManagerBuilder} 来指定 {@link AuthenticationManager}.
*
* 例如, 可以使用以下配置在内存中进行注册公开内存的身份验证{@link UserDetailsService}:
*
* // 在内存中添加 user 和 admin 用户
* @Override
* protected void configure(AuthenticationManagerBuilder auth) {
* auth
* .inMemoryAuthentication().withUser("user").password("password").roles("USER").and()
* .withUser("admin").password("password").roles("USER", "ADMIN");
* }
*
* // 将 UserDetailsService 显示为 Bean
* @Bean
* @Override
* public UserDetailsService userDetailsServiceBean() throws Exception {
* return super.userDetailsServiceBean();
* }
*
*/
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
this.disableLocalConfigureAuthenticationBldr = true;
}

    /**
* 复写这个方法来配置 {@link HttpSecurity}.
* 通常,子类不能通过调用 super 来调用此方法,因为它可能会覆盖其配置。 默认配置为:
*
* http.authorizeRequests().anyRequest().authenticated().and().formLogin().and().httpBasic();
*
*/
protected void configure(HttpSecurity http) throws Exception {
logger.debug("Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity).");

http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin().and()
.httpBasic();
}

类 AuthenticationManagerBuilder
 
 
/**
* {@link SecurityBuilder} used to create an {@link AuthenticationManager}. Allows for
* easily building in memory authentication, LDAP authentication, JDBC based
* authentication, adding {@link UserDetailsService}, and adding
* {@link AuthenticationProvider}'s.
*/

意思是,AuthenticationManagerBuilder 用于创建一个 AuthenticationManager,让我能够轻松的实现内存验证、LADP验证、基于JDBC的验证、添加UserDetailsService、添加AuthenticationProvider。
 
其他

如需转载,请联系作者,邮箱 545544032@qq.com 开源社区 http://spring4all.com 欢迎你
 
原文地址: http://www.jianshu.com/p/a8e317e82425
 

Spring Security 技术图谱

Spring Securityanoy 发表了文章 • 2 个评论 • 1402 次浏览 • 2017-06-08 13:27 • 来自相关话题

 
此图来源于阿里巴巴-小马哥

3424642-80ef85bd506cd2c4.png


 
此图来源于阿里巴巴-小马哥

如何自定义springsecurity OAuth 2的异常返回信息

回复

Spring BootkaysonYang 发起了问题 • 3 人关注 • 0 个回复 • 441 次浏览 • 2017-06-09 18:13 • 来自相关话题

【视频教程】Spring Security 实现 QQ 登录

视频公开课anoy 发表了文章 • 1 个评论 • 573 次浏览 • 2017-07-19 13:53 • 来自相关话题

周末休息时,录的视频教程,因为是第一次录,做得不好的地方还请大家热心指正!


 
原文地址:https://www.ictgu.cn/share/1c69465d
  查看全部
周末休息时,录的视频教程,因为是第一次录,做得不好的地方还请大家热心指正!



 
原文地址:https://www.ictgu.cn/share/1c69465d
 

spring boot 学习系列

开源项目hong 发表了文章 • 8 个评论 • 1848 次浏览 • 2017-06-21 09:35 • 来自相关话题

学习记录 https://github.com/t-hong/springboot-examples 

spring boot 学习系列 (使用版本 1.5.3) 
1.chapter1> springboot hello world. 2.chapter2> 配置文件详解:自定义属性、随机数、多环境配置等(目前只使用properties,后续添加yml的配置方式用法) 3.chapter3> spring boot 构建restful api以及单元测试,替换默认json 解析框架,使用fastjson 4.chapter3-jersey> springboot 整合jersey 实现restful. 5.chapter4-thymeleaf> spring boot 国际化相关处理和thymeleaf 模板语法的基本使用 6.chapter4-freemarker> 使用freemarker模板引擎 7.chapter4-jsp> spring boot 对jsp 的支持 8.chapter4-velocity> spring boot 使用velocity 版本情况说明 9.chapter5-swagger> spring boot 使用swagger构建restful api10.chapter6-handle-exception> spring boot 统一异常处理(返回异常对象json 或者modelandview) 11.chapter6-servlet> spring boot 下使用servlet、filter、listener以及springmvc interceptor 的相关处理. 12.chapter6-aop-log> spring boot log4j 使用aop方式添加日志. 13.chapter7-jdbctemplate> spring boot 整合jdbctemplate 操作数据库. 14.chapter7-spring-data-jpa> spring boot 整合spring data jpa ,简化数据库操作 15.chapter7-mybatis> spring boot 整合mybatis 使用,提供两种方式:xml 和annotation的方式。16.chapter7-mybatis-mapper-plugin> spring boot 整合mybatis 第三方mapper 插件、mybatis自动生成工具 generator 简化开发. 17.chapter8-jdbctemplate-mutil-datasource> spring boot 整合jdbctemplate 多数据源 18.chapter8-jpa-mutil-datasource> spring boot 整合spring data jpa 多数据源 19.chapter8-mybatis-mutil-datasource> spring boot 使用druid 数据源 整合mybatis 多数据源 20.chapter9-redis> spring boot 整合redis 21.chapter9-redis-cache> spring boot 使用redis 作为缓存实例 22.chapter9-redis-cluster> 添加了注释说明了JedisCluster 与RedisTemplate 操作RedisCluster 的一些使用原理 . 23.chapter9-redis-session> spring boot 整合Redis . 24.chapter10-shiro> spring boot 整合shiro 基本实例 25.chapter10-jwt> spring boot 整合jwt 实现token 认证. 26.chapter10-security> spring boot 整合security 实现简单权限控制. 27.chapter10-security-jwt> spring boot security token 整合实现认证登陆. 28.chapter11-caching-ehcache> spring boot框架缓存系列 ehcache . 29.chapter12-rocketmq> spring boot 整合rocketmq 测试. 查看全部
学习记录 https://github.com/t-hong/springboot-examples 

spring boot 学习系列 (使用版本 1.5.3) 
  • 1.chapter1> springboot hello world. 
  • 2.chapter2> 配置文件详解:自定义属性、随机数、多环境配置等(目前只使用properties,后续添加yml的配置方式用法) 
  • 3.chapter3> spring boot 构建restful api以及单元测试,替换默认json 解析框架,使用fastjson 
  • 4.chapter3-jersey> springboot 整合jersey 实现restful. 
  • 5.chapter4-thymeleaf> spring boot 国际化相关处理和thymeleaf 模板语法的基本使用 
  • 6.chapter4-freemarker> 使用freemarker模板引擎 
  • 7.chapter4-jsp> spring boot 对jsp 的支持 
  • 8.chapter4-velocity> spring boot 使用velocity 版本情况说明 
  • 9.chapter5-swagger> spring boot 使用swagger构建restful api
  • 10.chapter6-handle-exception> spring boot 统一异常处理(返回异常对象json 或者modelandview) 
  • 11.chapter6-servlet> spring boot 下使用servlet、filter、listener以及springmvc interceptor 的相关处理. 
  • 12.chapter6-aop-log> spring boot log4j 使用aop方式添加日志. 
  • 13.chapter7-jdbctemplate> spring boot 整合jdbctemplate 操作数据库. 
  • 14.chapter7-spring-data-jpa> spring boot 整合spring data jpa ,简化数据库操作 
  • 15.chapter7-mybatis> spring boot 整合mybatis 使用,提供两种方式:xml 和annotation的方式。
  • 16.chapter7-mybatis-mapper-plugin> spring boot 整合mybatis 第三方mapper 插件、mybatis自动生成工具 generator 简化开发. 
  • 17.chapter8-jdbctemplate-mutil-datasource> spring boot 整合jdbctemplate 多数据源 
  • 18.chapter8-jpa-mutil-datasource> spring boot 整合spring data jpa 多数据源 
  • 19.chapter8-mybatis-mutil-datasource> spring boot 使用druid 数据源 整合mybatis 多数据源 
  • 20.chapter9-redis> spring boot 整合redis 
  • 21.chapter9-redis-cache> spring boot 使用redis 作为缓存实例 
  • 22.chapter9-redis-cluster> 添加了注释说明了JedisCluster 与RedisTemplate 操作RedisCluster 的一些使用原理 . 
  • 23.chapter9-redis-session> spring boot 整合Redis . 
  • 24.chapter10-shiro> spring boot 整合shiro 基本实例 
  • 25.chapter10-jwt> spring boot 整合jwt 实现token 认证. 
  • 26.chapter10-security> spring boot 整合security 实现简单权限控制. 
  • 27.chapter10-security-jwt> spring boot security token 整合实现认证登陆. 
  • 28.chapter11-caching-ehcache> spring boot框架缓存系列 ehcache . 
  • 29.chapter12-rocketmq> spring boot 整合rocketmq 测试.

Spring Security 入门:登录与退出

Spring Securityanoy 发表了文章 • 4 个评论 • 1429 次浏览 • 2017-06-10 19:02 • 来自相关话题

前言

Spring Security 比较复杂,愿与各位一起研究使用,有歧义的地方,欢迎指出,谢谢!

Github 地址

https://github.com/ChinaSilenc ... y.git
本文示例地址:https://github.com/ChinaSilenc ... no-db

启动应用

1、clone 代码之后,进入 目录,启动应用
 
mvn spring-boot:run
2、demo 演示,地址:http://localhost:8080 账号 anoy 密码 pwd
 

 
相关解释说明
注解 @EnableWebSecurity

在 Spring boot 应用中使用 Spring Security,用到了 @EnableWebSecurity注解,官方说明如下:
/**
* Add this annotation to an {@code @Configuration} class to have the Spring Security
* configuration defined in any {@link WebSecurityConfigurer} or more likely by extending
* the {@link WebSecurityConfigurerAdapter} base class and overriding individual methods:
*/
意思是说, 该注解和 @Configuration 注解一起使用, 注解 WebSecurityConfigurer 类型的类,或者利用@EnableWebSecurity 注解继承 WebSecurityConfigurerAdapter的类,这样就构成了 Spring Security 的配置。
 
抽象类 WebSecurityConfigurerAdapter

一般情况,会选择继承 WebSecurityConfigurerAdapter 类,其官方说明如下:/**
* Provides a convenient base class for creating a {@link WebSecurityConfigurer}
* instance. The implementation allows customization by overriding methods.
*
* <p>
* Will automatically apply the result of looking up
* {@link AbstractHttpConfigurer} from {@link SpringFactoriesLoader} to allow
* developers to extend the defaults.
* To do this, you must create a class that extends AbstractHttpConfigurer and then create a file in the classpath at "META-INF/spring.factories" that looks something like:
* </p>
* <pre>
* org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer = sample.MyClassThatExtendsAbstractHttpConfigurer
* </pre>
* If you have multiple classes that should be added you can use "," to separate the values. For example:
*
* <pre>
* org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer = sample.MyClassThatExtendsAbstractHttpConfigurer, sample.OtherThatExtendsAbstractHttpConfigurer
* </pre>
*
*/
意思是说 WebSecurityConfigurerAdapter 提供了一种便利的方式去创建 WebSecurityConfigurer的实例,只需要重写 WebSecurityConfigurerAdapter 的方法,即可配置拦截什么URL、设置什么权限等安全控制。

方法 configure(AuthenticationManagerBuilder auth) 和 configure(HttpSecurity http)

Demo 中重写了 WebSecurityConfigurerAdapter 的两个方法:
 
/**
* 通过 {@link #authenticationManager()} 方法的默认实现尝试获取一个 {@link AuthenticationManager}.
* 如果被复写, 应该使用{@link AuthenticationManagerBuilder} 来指定 {@link AuthenticationManager}.
*
* 例如, 可以使用以下配置在内存中进行注册公开内存的身份验证{@link UserDetailsService}:
*
* // 在内存中添加 user 和 admin 用户
* @Override
* protected void configure(AuthenticationManagerBuilder auth) {
* auth
* .inMemoryAuthentication().withUser("user").password("password").roles("USER").and()
* .withUser("admin").password("password").roles("USER", "ADMIN");
* }
*
* // 将 UserDetailsService 显示为 Bean
* @Bean
* @Override
* public UserDetailsService userDetailsServiceBean() throws Exception {
* return super.userDetailsServiceBean();
* }
*
*/
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
this.disableLocalConfigureAuthenticationBldr = true;
}
/**
* 复写这个方法来配置 {@link HttpSecurity}.
* 通常,子类不能通过调用 super 来调用此方法,因为它可能会覆盖其配置。 默认配置为:
*
* http.authorizeRequests().anyRequest().authenticated().and().formLogin().and().httpBasic();
*
*/
protected void configure(HttpSecurity http) throws Exception {
logger.debug("Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity).");

http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin().and()
.httpBasic();
}
类 AuthenticationManagerBuilder
 
 
/**
* {@link SecurityBuilder} used to create an {@link AuthenticationManager}. Allows for
* easily building in memory authentication, LDAP authentication, JDBC based
* authentication, adding {@link UserDetailsService}, and adding
* {@link AuthenticationProvider}'s.
*/
意思是,AuthenticationManagerBuilder 用于创建一个 AuthenticationManager,让我能够轻松的实现内存验证、LADP验证、基于JDBC的验证、添加UserDetailsService、添加AuthenticationProvider。
 
其他

如需转载,请联系作者,邮箱 545544032@qq.com 开源社区 http://spring4all.com 欢迎你
 
原文地址: http://www.jianshu.com/p/a8e317e82425
  查看全部
前言

Spring Security 比较复杂,愿与各位一起研究使用,有歧义的地方,欢迎指出,谢谢!

Github 地址

https://github.com/ChinaSilenc ... y.git
本文示例地址:https://github.com/ChinaSilenc ... no-db

启动应用

1、clone 代码之后,进入 目录,启动应用
 
mvn spring-boot:run

2、demo 演示,地址:http://localhost:8080 账号 anoy 密码 pwd
 

 
相关解释说明
注解 @EnableWebSecurity

在 Spring boot 应用中使用 Spring Security,用到了 @EnableWebSecurity注解,官方说明如下:
/**
* Add this annotation to an {@code @Configuration} class to have the Spring Security
* configuration defined in any {@link WebSecurityConfigurer} or more likely by extending
* the {@link WebSecurityConfigurerAdapter} base class and overriding individual methods:
*/

意思是说, 该注解和 @Configuration 注解一起使用, 注解 WebSecurityConfigurer 类型的类,或者利用@EnableWebSecurity 注解继承 WebSecurityConfigurerAdapter的类,这样就构成了 Spring Security 的配置。
 
抽象类 WebSecurityConfigurerAdapter

一般情况,会选择继承 WebSecurityConfigurerAdapter 类,其官方说明如下:
/**
* Provides a convenient base class for creating a {@link WebSecurityConfigurer}
* instance. The implementation allows customization by overriding methods.
*
* <p>
* Will automatically apply the result of looking up
* {@link AbstractHttpConfigurer} from {@link SpringFactoriesLoader} to allow
* developers to extend the defaults.
* To do this, you must create a class that extends AbstractHttpConfigurer and then create a file in the classpath at "META-INF/spring.factories" that looks something like:
* </p>
* <pre>
* org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer = sample.MyClassThatExtendsAbstractHttpConfigurer
* </pre>
* If you have multiple classes that should be added you can use "," to separate the values. For example:
*
* <pre>
* org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer = sample.MyClassThatExtendsAbstractHttpConfigurer, sample.OtherThatExtendsAbstractHttpConfigurer
* </pre>
*
*/

意思是说 WebSecurityConfigurerAdapter 提供了一种便利的方式去创建 WebSecurityConfigurer的实例,只需要重写 WebSecurityConfigurerAdapter 的方法,即可配置拦截什么URL、设置什么权限等安全控制。

方法 configure(AuthenticationManagerBuilder auth) 和 configure(HttpSecurity http)

Demo 中重写了 WebSecurityConfigurerAdapter 的两个方法:
 
   /**
* 通过 {@link #authenticationManager()} 方法的默认实现尝试获取一个 {@link AuthenticationManager}.
* 如果被复写, 应该使用{@link AuthenticationManagerBuilder} 来指定 {@link AuthenticationManager}.
*
* 例如, 可以使用以下配置在内存中进行注册公开内存的身份验证{@link UserDetailsService}:
*
* // 在内存中添加 user 和 admin 用户
* @Override
* protected void configure(AuthenticationManagerBuilder auth) {
* auth
* .inMemoryAuthentication().withUser("user").password("password").roles("USER").and()
* .withUser("admin").password("password").roles("USER", "ADMIN");
* }
*
* // 将 UserDetailsService 显示为 Bean
* @Bean
* @Override
* public UserDetailsService userDetailsServiceBean() throws Exception {
* return super.userDetailsServiceBean();
* }
*
*/
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
this.disableLocalConfigureAuthenticationBldr = true;
}

    /**
* 复写这个方法来配置 {@link HttpSecurity}.
* 通常,子类不能通过调用 super 来调用此方法,因为它可能会覆盖其配置。 默认配置为:
*
* http.authorizeRequests().anyRequest().authenticated().and().formLogin().and().httpBasic();
*
*/
protected void configure(HttpSecurity http) throws Exception {
logger.debug("Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity).");

http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin().and()
.httpBasic();
}

类 AuthenticationManagerBuilder
 
 
/**
* {@link SecurityBuilder} used to create an {@link AuthenticationManager}. Allows for
* easily building in memory authentication, LDAP authentication, JDBC based
* authentication, adding {@link UserDetailsService}, and adding
* {@link AuthenticationProvider}'s.
*/

意思是,AuthenticationManagerBuilder 用于创建一个 AuthenticationManager,让我能够轻松的实现内存验证、LADP验证、基于JDBC的验证、添加UserDetailsService、添加AuthenticationProvider。
 
其他

如需转载,请联系作者,邮箱 545544032@qq.com 开源社区 http://spring4all.com 欢迎你
 
原文地址: http://www.jianshu.com/p/a8e317e82425
 

Spring Security 技术图谱

Spring Securityanoy 发表了文章 • 2 个评论 • 1402 次浏览 • 2017-06-08 13:27 • 来自相关话题

 
此图来源于阿里巴巴-小马哥

3424642-80ef85bd506cd2c4.png


 
此图来源于阿里巴巴-小马哥