关于 Spring For All

关于 Spring For All

Spring For All 的一切
最新动态

最新动态

Spring 5 会是咋样呢
Spring Boot

Spring Boot

快速构建并运行 Spring 应用程序
Spring Cloud

Spring Cloud

分布式系统的一套工具,可用于构建微服务
Spring Framework

Spring Framework

提供依赖注入、事务、Web应用、数据访问等模块
Spring Data

Spring Data

提供一致性数据访问模块
Spring Security

Spring Security

提供应用身份验证和授权支持
Spring Batch

Spring Batch

提供高容批处理操作模块
Spring AMQP

Spring AMQP

基于AMQP消息解决方案
Micro Service Arch.

Micro Service Arch.

微服务架构相关
开源项目及视频教程

开源项目及视频教程

做中国最好的 Spring 开源项目及视频教程
小马哥专栏

小马哥专栏

阿里技术布道者,专注 Spring Boot 及微服务

获取所有在线用户

回复

717457836Aa 发起了问题 • 0 人关注 • 0 个回复 • 123 次浏览 • 2017-09-14 11:12 • 来自相关话题

如何在使用OAuth2时更好的设计用户相关表?

回复

到得听能你有只 发起了问题 • 2 人关注 • 0 个回复 • 288 次浏览 • 2017-08-23 10:22 • 来自相关话题

Spring Boot Undertow https 升级完整记录

anoy 发表了文章 • 5 个评论 • 778 次浏览 • 2017-06-24 20:14 • 来自相关话题

前言
any-video 发布到 Github 三个月的时间,已经有300星了,感谢各位的支持。此项目纯属个人兴趣所开发,尝试所有新的技术,边学边用。今天演示站点升级 https,记录下升级过程。
演示地址:https://www.ictgu.cn

升级 https 记录
1、去阿里云购买证书(免费版),并提交审核资料

2、下载证书

3、查看上图页面的第三步

4、在证书目录下执行阿里云提供的命令,密码都填 pfx-password.txt 中的内容(三次),会生成 your-name.jks 文件。

此处我已改名为 any.jks
5、将 any.jks 复制到 spring boot 应用的 resources 目录下

6、在 application.yml 中配置证书及端口,密码填写第四步中的密码

此配置会使 Undertow 容器监听 443 端口,那么只有在域名前添加 https:// 才能访问网站内容,添加 http:// 则不行,所以需要让 Undertow 容器监听 80 端口,并将 80 端口的所有请求重定向到 443 端口,即完成 http 到 https 的跳转。
7、添加 SslConfig.java ,配置 Undertow 监听 80 端口。$(document).ready(function() {$('pre code').each(function(i, block) { hljs.highlightBlock( block); }); });[code]@Configuration
public class SslConfig {

@Bean
public EmbeddedServletContainerFactory servletContainer() {

UndertowEmbeddedServletContainerFactory undertowFactory = new UndertowEmbeddedServletContainerFactory();
undertowFactory.addBuilderCustomizers(new UndertowBuilderCustomizer() {

@Override
public void customize(Undertow.Builder builder) {
builder.addHttpListener(80, "0.0.0.0");
}

});
return undertowFactory;
}

}
[/code]
8、在 Spring Security 中配置 80 端口到 443 端口的映射

至此,重新打包应用,重新发布应用,即完成了 http 到 https 的升级, https 能让网站更安全,有兴趣的试试吧。Any 系列开源说明
Any-Video :Spring Boot 最佳实战
Any-Chat :基于 websocket 的 web 即时通信
any-spring-security :简单易懂的 Spring Security 实战 Demo关键词
Spring Boot、Undertow、mybatis、hackriCP
websocket、https、jsoup、Spring Security
查看全部
前言
any-video 发布到 Github 三个月的时间,已经有300星了,感谢各位的支持。此项目纯属个人兴趣所开发,尝试所有新的技术,边学边用。今天演示站点升级 https,记录下升级过程。
演示地址:https://www.ictgu.cn

升级 https 记录
1、去阿里云购买证书(免费版),并提交审核资料

2、下载证书

3、查看上图页面的第三步

4、在证书目录下执行阿里云提供的命令,密码都填 pfx-password.txt 中的内容(三次),会生成 your-name.jks 文件。

此处我已改名为 any.jks
5、将 any.jks 复制到 spring boot 应用的 resources 目录下

6、在 application.yml 中配置证书及端口,密码填写第四步中的密码

此配置会使 Undertow 容器监听 443 端口,那么只有在域名前添加 https:// 才能访问网站内容,添加 http:// 则不行,所以需要让 Undertow 容器监听 80 端口,并将 80 端口的所有请求重定向到 443 端口,即完成 http 到 https 的跳转。
7、添加 SslConfig.java ,配置 Undertow 监听 80 端口。
[code]@Configuration
public class SslConfig {

@Bean
public EmbeddedServletContainerFactory servletContainer() {

UndertowEmbeddedServletContainerFactory undertowFactory = new UndertowEmbeddedServletContainerFactory();
undertowFactory.addBuilderCustomizers(new UndertowBuilderCustomizer() {

@Override
public void customize(Undertow.Builder builder) {
builder.addHttpListener(80, "0.0.0.0");
}

});
return undertowFactory;
}

}
[/code]
8、在 Spring Security 中配置 80 端口到 443 端口的映射

至此,重新打包应用,重新发布应用,即完成了 http 到 https 的升级, https 能让网站更安全,有兴趣的试试吧。Any 系列开源说明
Any-Video :Spring Boot 最佳实战
Any-Chat :基于 websocket 的 web 即时通信
any-spring-security :简单易懂的 Spring Security 实战 Demo关键词
Spring Boot、Undertow、mybatis、hackriCP
websocket、https、jsoup、Spring Security

Spring Security 实战:QQ登录实现

anoy 发表了文章 • 5 个评论 • 1485 次浏览 • 2017-06-18 00:32 • 来自相关话题

准备工作

1、在 QQ互联 申请成为开发者,并创建应用,得到APP ID 和 APP Key。
2、了解QQ登录时的 网站应用接入流程。(必须看完看懂)

为了方便各位测试,直接把我自己申请的贡献出来:
APP ID : 101386962
APP Key:2a0f820407df400b84a854d054be8b6a
回调地址:http://www.ictgu.cn/login/qq

提醒:因为回调地址不是 http://localhost ,所以在启动我提供的demo时,需要在host文件中添加一行:
127.0.0.1 www.ictgu.cn

 
Github 地址
 
https://github.com/ChinaSilenc ... urity
 
运行应用
1、进入 security-oauth2-qq 目录,执行:
mvn spring-boot:run2、此处假设你已经修改好host,并启动成功,访问 http://www.ictgu.cn

3、登录 -> QQ登录 -> 个人中心,将会看到个人信息。
 
 
 
4、删除host中添加的那一行。
 
 
 
相关说明
 

腾讯官网原话:
openid是此网站上唯一对应用户身份的标识,网站可将此ID进行存储便于用户下次登录时辨识其身份,或将其与用户在网站上的原有账号进行绑定。

 
通过QQ登录获取的 openid 用于与自己网站的账号一一对应。
 
相关文章
 
Spring Security 入门:登录与退出
Spring Security 入门:自定义 Filter
 
相关资料
 
Spring Security Architecture
What is authentication in Spring Security?
  查看全部
准备工作

1、在 QQ互联 申请成为开发者,并创建应用,得到APP ID 和 APP Key。
2、了解QQ登录时的 网站应用接入流程。(必须看完看懂)

为了方便各位测试,直接把我自己申请的贡献出来:
APP ID : 101386962
APP Key:2a0f820407df400b84a854d054be8b6a
回调地址:http://www.ictgu.cn/login/qq


提醒:因为回调地址不是 http://localhost ,所以在启动我提供的demo时,需要在host文件中添加一行:
127.0.0.1 www.ictgu.cn


 
Github 地址
 
https://github.com/ChinaSilenc ... urity
 
运行应用
1、进入 security-oauth2-qq 目录,执行:
mvn spring-boot:run
2、此处假设你已经修改好host,并启动成功,访问 http://www.ictgu.cn

3、登录 -> QQ登录 -> 个人中心,将会看到个人信息。
 
 
 
4、删除host中添加的那一行。
 
 
 
相关说明
 


腾讯官网原话:
openid是此网站上唯一对应用户身份的标识,网站可将此ID进行存储便于用户下次登录时辨识其身份,或将其与用户在网站上的原有账号进行绑定。


 
通过QQ登录获取的 openid 用于与自己网站的账号一一对应。
 
相关文章
 
Spring Security 入门:登录与退出
Spring Security 入门:自定义 Filter
 
相关资料
 
Spring Security Architecture
What is authentication in Spring Security?
 

Spring Security 入门:登录与退出

anoy 发表了文章 • 4 个评论 • 1477 次浏览 • 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 技术图谱

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

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

3424642-80ef85bd506cd2c4.png


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