安全
Spring Boot提供三个层级的安全设置
- Spring Security :用作WEB应用的登录
- OAuth 2 :用作认证服务器
- Actuator Security :用作Actuator的安全设置
本次只简单探索下Spring Security在Spring Boot中的应用。
Spring Security
Spring Boot针对Spring Security的自动配置在org.springframework.boot.autoconfigure.security包中。
如果添加了Spring Security的依赖,那么web应用默认对所有的HTTP路径(也称为终点,端点,表示API的具体网址)使用basic
认证。为了给web应用添加方法级别(method-level)的保护,可以添加 @EnableGlobalMethodSecurity
并使用想要的设置,其他信息参考Spring Security Reference。
默认的 AuthenticationManager
只有一个用户(用户名为user
的用户名, 随机密码会在应用启动时以INFO日志级别打印出来)
默认的安全配置是通过 SecurityAutoConfiguration
, SpringBootWebSecurityConfiguration
(用于web安全), AuthenticationManagerConfiguration
(可用于非web应用的认证配置)进行管理的。可以添加一个 @EnableWebSecurity
bean来彻底关掉Spring Boot的默认配置。为了对它进行自定义,需要使用外部的属性配置和 WebSecurityConfigurerAdapter
类型的beans(比如,添加基于表单的登陆)。 想要关闭认证管理的配置,可以添加一个 AuthenticationManager
类型的bean,或在 @Configuration
类的某个方法里注入 AuthenticationManagerBuilder
来配置全局的 AuthenticationManager
。
这里有一些安全相关的Spring Boot应用示例可以拿来参考。
在web应用中能得到的开箱即用的基本特性如下:
- 一个使用内存存储的
AuthenticationManager
bean和一个用户(查看 SecurityProperties.User
获取user的属性)。
- 忽略(不保护)常见的静态资源路径(
/css/**
, /js/**
, /images/**
, /webjars/**
和 **/favicon.ico
)。
- 对其他所有路径实施HTTP Basic安全保护。
- 安全相关的事件会发布到Spring的
ApplicationEventPublisher
(成功和失败的认证,拒绝访问)。
- Spring Security提供的常见底层特性(HSTS, XSS, CSRF, 缓存)默认都被开启。
上述所有特性都能通过外部配置( security.*
)打开,关闭,或修改。想要覆盖访问规则而不改变其他自动配置的特性,可以添加一个注解 @Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
的 WebSecurityConfigurerAdapter
类型的 @Bean 。当我们自己扩展的配置时,只需配置类基础呢个WebSecurityConfigurerAdapter
就可以了。
SecurityProperties使用以security
为前缀的属性配置Spring Security相关的配置,
实验
本实验基于Spring Security, MYSQL和Thymeleaf实现。
创建数据库
创建一个Maven项目
pom.xml
application.yml
index.html
login.html
Role.java
User.java
CustomUserService.java
MyPermissionEvaluator.java
SecurityConfig.java
HomeController.java
UserRepository.java
App.java
项目结构
运行及结果
初始化数据库脚本
程序启动后会在数据库初始化相关的数据表如下:
然后在数据库执行如下脚本插入初始化数据:
访问登录界面
请求http://localhost:9090/
, URL会重定向到http://localhost:9090/login
登录出错
输入错误的用户名和密码aaa/aaa
登录成功-ROLE_ADMIN
使用root/root
用户登录之后,展示的是角色ROLE_AMDIN
内容
登录成功-ROLE_USER
使用admin/admin
用户登录之后,展示的是角色ROLE_AMDIN
内容
注销
登录成功后点击注销
参考资料
Spring Boot Reference Guide : http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/
《JavaEE开发的颠覆者 Spring Boot实战》 - 汪云飞
【Spring】关于Boot应用中集成Spring Security你必须了解的那些事 : http://www.cnblogs.com/softidea/p/5991897.html
在Spring Boot中使用Spring Security实现权限控制 : http://blog.csdn.net/u012702547/article/details/54319508
Test26-Security : https://github.com/lenve/JavaEETest/tree/master/Test26-Security