文档章节

Spring Boot 的 Security 安全控制

o
 osc_fmg49rzg
发布于 2019/03/20 09:07
字数 794
阅读 36
收藏 0

精选30+云产品,助力企业轻松上云!>>>

Spring Security 是一个强大且高度可定制的身份验证和访问控制框架,完全基于 Spring 的应用程序的标准,Spring Security 为基于 Java EE 的企业应用程序提供了一个全面的安全解决方案。

安全框架最主要包括两个操作

  • 认证(Authentication) 确认用户可以访问当前系统
  • 授权(Authorization) 确定用户在当前系统中是否能够执行某个操作,即用户所拥有的功能权限。

Spring Security 适配器

在 Spring Boot 当中配置 Spring Security 非常简单,创建一个自定义类继承 WebSecurityConfigurerAdapter,并在该类中使用 @EnableWebSecurity注解,就可以通过重写 config 方法来配置所需要的安全配置。

WebSecurityConfigurerAdapter 是 Spring Security 为 web 应用提供的一个适配器,实现了 WebSecurityConfigurer 接口,提供了两个方法用于重写开发者需要的安全配置。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
    protected void configure(HttpSecurity http) throws Exception {}
    
@Override
	protected void configure(AuthenticationManagerBuilder auth) throws Exception {}

}

configure(HttpSecurity http) 方法中可以通过 HttpSecurityauthorizeRequests() 方法定义哪些 URL 需要被保护,哪些不需要被保护;通过 formLogin() 方法定义当前用户登录的时候,跳转到的登录界面。

configure(AuthenticationManagerBuilder auth) 方法用于创建用户和用户的角色。

用户认证

Spring Security 是通过在 configure(AuthenticationManagerBuilder auth) 完成用户认证的。使用 AuthenticationManagerBuilderinMemoryAuthentication() 方法可以向内存中添加用户,并给用户指定权限。

	protected void configure(AuthenticationManagerBuilder auth) throws Exception {
		super.configure(auth);
//        在内存中添加用用户,并给用户指定角色权限
		auth.inMemoryAuthentication().withUser("admin").password("admin").roles("ADMIN","DBA");
		auth.inMemoryAuthentication().withUser("yang").password("123456").roles("USER");
}

上边的代码中添加了两个用户,其中一个用户名是 yang 密码是 123456 用户权限是 USER ; 另一个用户名是 admin 密码是 admin 用户权限是两个 ADMIN DBA 。 需要注意的是 Spring Security 保存用户权限的时候,会默认使用 ROLE_ ,也就是说, USER 实际上是 ROLE_USER, ADMIN 是 ROLE_ADMIN ,DBA 实际上是 ROLE_DBA

当然,也可以查询数据库获取用户和权限。

用户授权

Spring Security 是通过 configure(HttpSecurity http) 完成用户授权。

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                //// 开始请求权限配置
                .authorizeRequests()
                // 我们指定任何用户都可以访问多个URL的模式。
                // 任何用户都可以访问以"/resources/","/signup", 或者 "/about"开头的URL。
                .antMatchers("/assets/**","/").permitAll()
                // 请求匹配 /admin/** 只拥有 ROLE_ADMIN 角色的用户可以访问
                .antMatchers("/yang/**").hasRole("ADMIN")
                // 请求匹配 /user/** 拥有 ROLE_ADMIN 和 ROLE_USER 的角色用户都可以访问
                .antMatchers("/user/**").hasAnyRole("ADMIN", "USER")
                // 任何以"/db/" 开头的URL需要同时具有 "ROLE_ADMIN" 和 "ROLE_DBA"权限的用户才可以访问。
                // 和上面一样我们的 hasRole 方法也没有使用 "ROLE_" 前缀。
                // .antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")
                // 其余所有的请求都需要认证后才可以访问
                .anyRequest().authenticated();

        http
                .formLogin()
                // 登陆界面;默认登陆成功后的界面(不起作用);默认登陆失败的界面;表单提交地址
                .loginPage("/login.html")
                .loginProcessingUrl("/login")
                .failureUrl("/login.html?error")
                .permitAll()
                .and()
                .rememberMe()
                        .tokenValiditySeconds(1209600)
                        .key("rememberme")
                .and()
                .logout()
                        .logoutUrl("/logout")
                        .logoutSuccessUrl("/login.html")
                        .permitAll();

        http
                .formLogin().defaultSuccessUrl("/index.html");

    }
上一篇: 安全牛-安装
下一篇: MyBatis 中的级联
o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

前言 生产上对 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以通过一个...

码农小胖哥
2019/10/20
1.2K
0
SpringBoot入坑指南之四:使用Spring Boot Admin进行服务监控

开篇 说个笑话:“你的代码没有Bug!”。 谁也不能保证自己的代码没有Bug,自己的代码能够100%满足业务性能要求,当线上的服务出问题后,如何快速定位问题、解决问题,这才是一个好程序猿的标...

centychen
2019/02/13
286
0
Spring Security 中的四种权限控制方式

Spring Security 中对于权限控制默认已经提供了很多了,但是,一个优秀的框架必须具备良好的扩展性,恰好,Spring Security 的扩展性就非常棒,我们既可以使用 Spring Security 提供的方式做...

_江南一点雨
06/30
0
0
《深入理解Spring Cloud与微服务构建》第7章 Spring Boot Security详解

1、Spring Security简介 1.1 什么是Spring Security Spring Security是Spring Resource社区的一个安全组件,Spring Security为JavaEE企业级开发提供了全面的安全防护。安全防护是一个不断变化...

Lienson
2019/04/08
174
3
Spring Boot中使用Spring Security进行安全控制

我们在编写Web应用时,经常需要对页面做一些安全控制,比如:对于没有访问权限的用户需要转到登录表单页面。要实现访问控制的方法多种多样,可以通过Aop、拦截器实现,也可以通过框架实现(如...

osc_4nmshwhm
2018/08/07
6
0

没有更多内容

加载失败,请刷新页面

加载更多

如何删除使用Python的easy_install安装的软件包? - How do I remove packages installed with Python's easy_install?

问题: Python's easy_install makes installing new packages extremely convenient. Python的easy_install使安装新包非常方便。 However, as far as I can tell, it doesn't implement th......

fyin1314
15分钟前
0
0
如何将逗号分隔的字符串转换为数组? - How to convert a comma separated string to an array?

问题: I have a comma separated string that I want to convert into an array, so I can loop through it. 我有一个逗号分隔的字符串,我想将其转换成数组,因此可以循环遍历它。 Is the...

富含淀粉
45分钟前
13
0
深源恒际:担心个人身份被冒用?不存在!

本文作者:c****t 近日,苟晶被冒名顶替身份参加高考的事件在社会各界掀起广泛热议。事件调查结果公布后,舆论风向逆转,吃瓜群众认为当事人夸大其词消费了公众情绪,一边对当事人所遭遇的不...

百度开发者中心
昨天
5
0
CKEditor 5 + SpringBoot实战(三):SpringData JPA数据持久化

在本系列的文章中,我将介绍如何在Spring Boot Application中使用CKEditor编辑器。介绍的内容包括基本环境的搭建,文件上传,SpringData JPA数据持久化,CKEditor5的安装,CKEditor图片上传,...

树下魅狐
今天
9
0
Confluence 如何查看页面 ID

如果你希望查看页面的 ID 你有 2 个方法。 例如,你希望查看 https://www.cwiki.us/display/CONFLUENCEWIKI/Get+started 页面的 Page ID 的话。 如果你的标题栏没有特殊字符,那么将会使用英...

honeymoose
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部