SpringSecurity
SpringSecurity是Spring家族中的一个安全管理框架,实际E,在SpringBoot出现之前,SpringSecurity就已经发展了多年了,但是使用的并不多,安全管理这个领域,一直是Shiro的天下。
相对于Shiro,在SSMISSH中整合Spring Security都是比较麻烦的操作,所以,Spring Security虽然功能比Shiro强大,但是使用反而没有Shiro多(Shiro虽然功能没有Spring Security多,但是对于大部分项目而言,Shiro也够用了)
自从有了Spring Boot之后,Spring Boot对于Spring Security提供了自动化配置方案,可以零配置使用Spring Security.
因此,一般来说,常见的安全管理技术栈的组合是这样的
SSM/H + Shiro
SpringBoot/SpringCloud + SpringSecurity
注意,这只是一个推荐的组合而已,如果单纯从技术上来说,无论怎么组合,都是可以运行的。
SpringSecurity简介
打开 Spring Security 的官网,从其首页的预览上就可以看见如下文字:
Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications.
Spring Security is a framework that focuses on providing both authentication and authorization to Java applications. Like all Spring projects, the real power of Spring Security is found in how easily it can be extended to meet custom requirements.
这段文字的大致意思是:
- Spring Security 是一个强大的、可高度定制化的身份验证和访问控制的框架,它基本上是保护基于 Spring 应用的安全标准。
- Spring Security 是一个专注于向 Java 应用程序提供身份验证和授权的框架。像所有的 Spring 项目一样,Spring Security 的真正威力在于它可以很容易地被扩展以满足定制需求。
身份验证和访问控制是应用安全的两个重要方面,也常常被称为“认证”和“授权”。
- 认证就是确定主体的过程,当未认证的主体访问系统资源的时候,系统会对主体的身份进行验证,确定该主体是否有合法的身份,不合法的主体将被应用拒绝访问,这一点也很容易理解,比如某电商网站,未登录的用户是无法访问敏感数据资源的,比如订单信息。
- 授权是在主体认证结束后,判断该认证主体是否有权限去访问某些资源,没有权限的访问将被系统拒绝,比如某电商网站的登录用户去查看其它用户的订单信息,很明显,系统会拒绝这样的无理要求。
上面的两点是应用安全的基本关注点,Spring Security 存在的意义就是帮助开发者更加便捷地实现了应用的认证和授权能力。
SpringSecurity配置
这里就不展示前端的页面了,将代码托管到github上,以便后续学习。
https://github.com/201705010201/SpringSecurity-
package com.cc.config;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
//授权
@Override
protected void configure(HttpSecurity http) throws Exception {
//首页所有人可以访问,功能页只有对应有权限的人才能访问
http.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/level1/**").hasRole("vip1")
.antMatchers("/level2/**").hasRole("vip2")
.antMatchers("/level3/**").hasRole("vip3");
//没有权限默认会到登录页面,需要开启登录的页面
http.formLogin().loginPage("/toLogin");
http.csrf().disable();//关闭
//注销
http.logout().logoutSuccessUrl("/");
}
//认证
//PasswordEncoder(密码编码)
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
.withUser("yue").password(new BCryptPasswordEncoder().encode("123456")).roles("vip2,vip3")
.and()
.withUser("root").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2","vip3")
.and()
.withUser("guest").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1");
}
}
上一篇: kubernetes学习4--资源配额管理(租户配额)
下一篇: 变量的作用域