返回顶部
首页 > 资讯 > 精选 >Spring Security核心配置有哪些
  • 590
分享到

Spring Security核心配置有哪些

2023-06-04 09:06:11 590人浏览 安东尼
摘要

这篇文章主要讲解了“spring Security核心配置有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Security核心配置有哪些”吧!核心配置解读3.1 功能介绍这

这篇文章主要讲解了“spring Security核心配置有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Security核心配置有哪些”吧!

核心配置解读

3.1 功能介绍

这是Spring Security入门指南中的配置项:

@Configuration@EnableWEBSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter {  @Override  protected void configure(httpsecurity Http) throws Exception {      http          .authorizeRequests()              .antMatchers("/", "/home").permitAll()              .anyRequest().authenticated()              .and()          .fORMLogin()              .loginPage("/login")              .permitAll()              .and()          .loGout()              .permitAll();  }  @Autowired  public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {      auth          .inMemoryAuthentication()              .withUser("admin").password("admin").roles("USER");  }}

当配置了上述的javaconfig之后,我们的应用便具备了如下的功能:

  • 除了“/”,"/home"(首页),"/login"(登录),"/logout"(注销),之外,其他路径都需要认证。

  • 指定“/login”该路径为登录页面,当未认证的用户尝试访问任何受保护的资源时,都会跳转到“/login”。

  • 默认指定“/logout”为注销页面

  • 配置一个内存中的用户认证器,使用admin/admin作为用户名和密码,具有USER角色

  • 防止CSRF攻击

  • Session Fixation protection(可以参考我之前讲解Spring Session的文章,防止别人篡改sessionId)

  • Security Header(添加一系列和Header相关的控制)

    • HTTP Strict Transport Security for secure requests

    • 集成X-Content-Type-Options

    • 缓存控制

    • 集成X-XSS-Protection

    • X-Frame-Options integration to help prevent Clickjacking(iframe被默认禁止使用)

  • 为Servlet api集成了如下的几个方法

    • HttpServletRequest#getRemoteUser()

    • HttpServletRequest.html#getUserPrincipal()

    • HttpServletRequest.html#isUserInRole(java.lang.String)

    • HttpServletRequest.html#login(java.lang.String, java.lang.String)

    • HttpServletRequest.html#logout()

3.2 @EnableWebSecurity

我们自己定义的配置类WebSecurityConfig加上了@EnableWebSecurity注解,同时继承了WebSecurityConfigurerAdapter。你可能会在想谁的作用大一点,毫无疑问@EnableWebSecurity起到决定性的配置作用,它其实是个组合注解。

@Import({ WebSecurityConfiguration.class, //       SpringWebmvcImportSelector.class }) // @EnableGlobalAuthentication // @Configurationpublic @interface EnableWebSecurity {   boolean debug() default false;}

@Import是SpringBoot提供的用于引入外部的配置的注解,可以理解为:@EnableWebSecurity注解激活了@Import注解中包含的配置类。

@Import(AuthenticationConfiguration.class)@Configurationpublic @interface EnableGlobalAuthentication {}

注意点同样在@Import之中,它实际上激活了AuthenticationConfiguration这样的一个配置类,用来配置认证相关的核心类。

也就是说:@EnableWebSecurity完成的工作便是加载了WebSecurityConfiguration,AuthenticationConfiguration这两个核心配置类,也就此将spring security的职责划分为了配置安全信息,配置认证信息两部分。

WebSecurityConfiguration

在这个配置类中,有一个非常重要的Bean被注册了。

@Configurationpublic class WebSecurityConfiguration {    //DEFAULT_FILTER_NAME = "springSecurityFilterChain"    @Bean(name = AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME)    public Filter springSecurityFilterChain() throws Exception {        ...    } }

在未使用springboot之前,大多数人都应该对“springSecurityFilterChain”这个名词不会陌生,他是spring security的核心过滤器,是整个认证的入口。在曾经的XML配置中,想要启用spring security,需要在web.xml中进行如下配置:

                springSecurityFilterChain        org.springframework.web.filter.DelegatingFilterProxy                springSecurityFilterChain        /*

而在springboot集成之后,这样的XML被java配置取代。WebSecurityConfiguration中完成了声明springSecurityFilterChain的作用,并且最终交给DelegatingFilterProxy这个代理类,负责拦截请求(注意DelegatingFilterProxy这个类不是spring security包中的,而是存在于web包中,spring使用了代理模式来实现安全过滤的解耦)。

AuthenticationConfiguration
@Configuration@Import(ObjectPostProcessorConfiguration.class)public class AuthenticationConfiguration {      @Bean    public AuthenticationManagerBuilder authenticationManagerBuilder(            ObjectPostProcessor objectPostProcessor) {        return new AuthenticationManagerBuilder(objectPostProcessor);    }      public AuthenticationManager getAuthenticationManager() throws Exception {        ...    }}

AuthenticationConfiguration的主要任务,便是负责生成全局的身份认证管理者AuthenticationManager。还记得在《Spring Security(一)--Architecture Overview》中,介绍了Spring Security的认证体系,AuthenticationManager便是最核心的身份认证管理器。

3.3 WebSecurityConfigurerAdapter

适配器模式在spring中被广泛的使用,在配置中使用Adapter的好处便是,我们可以选择性的配置想要修改的那一部分配置,而不用覆盖其他不相关的配置。WebSecurityConfigurerAdapter中我们可以选择自己想要修改的内容,来进行重写,而其提供了三个configure重载方法,是我们主要关心的:

Spring Security核心配置有哪些

由参数就可以知道,分别是对AuthenticationManagerBuilder,WebSecurity,HttpSecurity进行个性化的配置。

HttpSecurity常用配置
@Configuration@EnableWebSecuritypublic class CustomWebSecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(HttpSecurity http) throws Exception {        http            .authorizeRequests()                .antMatchers("/resources/**", "/signup", "/about").permitAll()                .antMatchers("/admin/**").hasRole("ADMIN")                .antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")                .anyRequest().authenticated()                .and()            .formLogin()                .usernameParameter("username")                .passWordParameter("password")                .failureForwardUrl("/login?error")                .loginPage("/login")                .permitAll()                .and()            .logout()                .logoutUrl("/logout")                .logoutSuccessUrl("/index")                .permitAll()                .and()            .httpBasic()                .disable();    }}

上述是一个使用Java Configuration配置HttpSecurity的典型配置,其中http作为根开始配置,每一个and()对应了一个模块的配置(等同于xml配置中的结束标签),并且and()返回了HttpSecurity本身,于是可以连续进行配置。他们配置的含义也非常容易通过变量本身来推测,

  • authorizeRequests()配置路径拦截,表明路径访问所对应的权限,角色,认证信息。

  • formLogin()对应表单认证相关的配置

  • logout()对应了注销相关的配置

  • httpBasic()可以配置basic登录

  • etc

他们分别代表了http请求相关的安全配置,这些配置项无一例外的返回了Configurer类,而所有的http相关配置可以通过查看HttpSecurity的主要方法得知:

Spring Security核心配置有哪些

需要对http协议有一定的了解才能完全掌握所有的配置,不过,springboot和spring security的自动配置已经足够使用了。其中每一项Configurer(e.g.FormLoginConfigurer,CsrfConfigurer)都是HttpConfigurer的细化配置项。

WebSecurityBuilder
@Configuration@EnableWebSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter {    @Override    public void configure(WebSecurity web) throws Exception {        web            .ignoring()            .antMatchers("/resources/**");    }}

以笔者的经验,这个配置中并不会出现太多的配置信息。

AuthenticationManagerBuilder
@Configuration@EnableWebSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(AuthenticationManagerBuilder auth) throws Exception {        auth            .inMemoryAuthentication()            .withUser("admin").password("admin").roles("USER");    }}

想要在WebSecurityConfigurerAdapter中进行认证相关的配置,可以使用configure(AuthenticationManagerBuilder auth)暴露一个AuthenticationManager的建造器:AuthenticationManagerBuilder 。如上所示,我们便完成了内存中用户的配置。

细心的朋友会发现,在前面的文章中我们配置内存中的用户时,似乎不是这么配置的,而是:

@Configuration@EnableWebSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter {    @Autowired    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {        auth            .inMemoryAuthentication()                .withUser("admin").password("admin").roles("USER");    }}

如果你的应用只有唯一一个WebSecurityConfigurerAdapter,那么他们之间的差距可以被忽略,从方法名可以看出两者的区别:使用@Autowired注入的AuthenticationManagerBuilder是全局的身份认证器,作用域可以跨越多个WebSecurityConfigurerAdapter,以及影响到基于Method的安全控制;而 protectedconfigure()的方式则类似于一个匿名内部类,它的作用域局限于一个WebSecurityConfigurerAdapter内部。

感谢各位的阅读,以上就是“Spring Security核心配置有哪些”的内容了,经过本文的学习后,相信大家对Spring Security核心配置有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Spring Security核心配置有哪些

本文链接: https://lsjlt.com/news/237218.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Spring Security核心配置有哪些
    这篇文章主要讲解了“Spring Security核心配置有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Security核心配置有哪些”吧!核心配置解读3.1 功能介绍这...
    99+
    2023-06-04
  • Spring Cloud Alibaba核心组件有哪些
    这篇文章主要讲解了“Spring Cloud Alibaba核心组件有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Cloud Alibaba核心组件有哪些”吧!Java语...
    99+
    2023-06-03
  • spring boot的核心注解有哪些
    这期内容当中小编将会给大家带来有关spring boot的核心注解有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在spring boot中,摒弃了spring以往项目中大量繁琐的配置,遵循约定大于配...
    99+
    2023-06-05
  • Spring Security 核心过滤器链讲解
    目录一、Filter Chain 图解二、过滤器逐一解析2.1.WebAsyncManagerIntegrationFilter2.2.SecurityContextPersiste...
    99+
    2024-04-02
  • Spring Security核心过滤器链是什么
    本篇内容主要讲解“Spring Security核心过滤器链是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Security核心过滤器链是什么”吧!一、Fi...
    99+
    2023-06-21
  • spring的核心配置文件是什么
    在Spring框架中,核心的配置文件通常是一个XML文件,命名为applicationContext.xml。该文件包含了Sprin...
    99+
    2023-10-08
    spring
  • Python有哪些核心库
    这篇文章主要介绍“Python有哪些核心库”,在日常操作中,相信很多人在Python有哪些核心库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python有哪些核心库”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-16
  • Shiro核心类有哪些
    这篇文章主要讲解了“Shiro核心类有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shiro核心类有哪些”吧!一:SessionManager简介Shiro提供了完整的会话管理功能,不...
    99+
    2023-06-02
  • jquery有哪些核心函数
    这篇文章主要讲解了“jquery有哪些核心函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“jquery有哪些核心函数”吧! j...
    99+
    2024-04-02
  • node.js核心模块有哪些
    目录全局对象全局对象与全局变量processconsole常用工具util事件机制events--Events模块事件发射器error事件文件系统fs--fs模块Http 模块全局对...
    99+
    2024-04-02
  • es6核心特性有哪些
    本篇内容主要讲解“es6核心特性有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“es6核心特性有哪些”吧! es6核心特性有:1...
    99+
    2024-04-02
  • vue有哪些核心技术
    这篇文章给大家分享的是有关vue有哪些核心技术的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 vue有两大核心:1、数据驱动,也就是数据的双向绑定,让...
    99+
    2024-04-02
  • PHP核心架构有哪些
    这篇文章将为大家详细讲解有关PHP核心架构有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、Zend引擎Zend是PHP内核的一部分,完全用纯C实现,它将PHP代码翻译(词法、语法解析等一系列编译过...
    99+
    2023-06-15
  • Java核心技术有哪些
    本篇内容介绍了“Java核心技术有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  >>>***位用0填充,...
    99+
    2023-06-17
  • Hibernate核心接口有哪些
    这篇文章主要介绍“Hibernate核心接口有哪些”,在日常操作中,相信很多人在Hibernate核心接口有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Hibernate核心接口有哪些”的疑惑有所帮助!...
    99+
    2023-06-17
  • Hibernate有哪些核心接口
    这篇文章主要介绍Hibernate有哪些核心接口,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所...
    99+
    2023-06-17
  • 详解Spring Security 简单配置
    开发环境 maven idea jdk 1.8 tomcat 8配置spring mvc + spring securitypom.xml <properties> <spring.version>4.3....
    99+
    2023-05-31
    spring security 配置
  • SpringCloud的spring-security怎么配置
    这篇文章主要讲解了“SpringCloud的spring-security怎么配置”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringCloud的spring-security怎么配置...
    99+
    2023-06-05
  • nodejs的核心模块有哪些
    这篇文章主要介绍“nodejs的核心模块有哪些”,在日常操作中,相信很多人在nodejs的核心模块有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”nodejs的核心模块有...
    99+
    2024-04-02
  • cdn的核心优势有哪些
    cdn的核心优势有减少了托管成本。提升排名,增加流量。降低了延迟时间。解决了跨运营商和跨地域访问的问题。cdn的本质上是将媒体资源、动静态图片、HTML、CSS、JS等等内容缓存到距离你更近的IDC,从而让用户进行共享资源,实现缩减站点间的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作