Java学习笔记-SpringSecurity入门-搬运文章(单体项目)

SpringSecurity-入门版

1.  SpringSecurity概述

1.1.  SpringSecurity介绍

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

2.  SpringSecurity入门

2.1.入门案例-认证

l  搭建工程

基于SpringBoot搭建web工程 ,项目名为“spring-security-demo”

l  导入依赖

这里继承了SpringBoot的父工程,引入SpringSecurity基础依赖

“spring-boot-starter-security”,以及集成web的依赖“spring-boot-starter-web”

 

<parent>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-parent</artifactId>

    <version>2.0.5.RELEASE</version>

  </parent>

 

  <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <maven.compiler.source>1.8</maven.compiler.source>

    <maven.compiler.target>1.8</maven.compiler.target>

  </properties>

 

  <dependencies>

    <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-security</artifactId>

    </dependency>

 

    <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

   

    <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-test</artifactId>

      <scope>test</scope>

    </dependency>

 

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>4.12</version>

      <scope>test</scope>

    </dependency>

  </dependencies>

 

l  主配置类

 

@SpringBootApplication

public class ApplicationConfig {

    public static void main(String[] args) {

        SpringApplication.run(ApplicationConfig.class);

    }

}

 

l  Web控制器

当用户认证成功之后会重定向到该方法,返回“登录成功”给用户

@Controller

public class AuthController {

         //登录成功后重定向地址

    @RequestMapping("/loginSuccess")

    @ResponseBody

    public String loginSuccess(){

        return "登录成功";

}

}

 

l  配置SpringSecurity

 

SpringSecurity提供了一个配置类WebSecurityConfigurerAdapter用来提供给程序员对SpringSecurity做自定义配置,我们需要配置如下几个信息:

 

²  创建UserDetailService的Bean,该组件是用来加载用户认证信息

²  配置编码器,通过该编码器对密码进行加密匹配。

²  授权规则配置,哪些资源需要什么权限..

@Configuration

@EnableWebSecurity

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

 

     //提供用户信息,这里没有从数据库查询用户信息,在内存中模拟

    @Bean

    public UserDetailsService userDetailsService(){

        InMemoryUserDetailsManager inMemoryUserDetailsManager =

        new InMemoryUserDetailsManager();

        inMemoryUserDetailsManager.createUser(User.withUsername("zs").password("123").authorities("admin").build());

        return inMemoryUserDetailsManager;

    }

 

 

    //密码编码器:不加密

    @Bean

    public PasswordEncoder passwordEncoder(){

        return NoOpPasswordEncoder.getInstance();

    }

   

    //授权规则配置

    @Override

    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests()                                //授权配置

                .antMatchers("/login").permitAll()  //登录路径放行

                .anyRequest().authenticated()                   //其他路径都要认证之后才能访问

                .and().formLogin()                              //允许表单登录

                .successForwardUrl("/loginSuccess")             // 设置登陆成功页

                .and().logout().permitAll()                    //登出路径放行

                .and().csrf().disable();                        //关闭跨域伪造检查

    }

}

 

2.2.认证流程小结

SpringBoot+SpringSecurity集成入门案例到这里就结束了,这里并没有多SpringSecurity原理做过多解释(留在后面章节),那么这个案例大概的实现思路是:

 

 

 

  •  SpringSecurity根据我们在WebSecurityConfig中的配置会对除了“/login”之外的资源进行拦截做认证检查,
  •  如果没有认证会跳转到默认的认证页面“/login” ,
  • 输入用户名和密码后点击登录,SpringSecurity会带着用户名调用 UserDetailsService.loadUserByUsername获取用户的认证信息(用户名,密码,权限等),
  •   然后执行认证工作:表单密码和loadUserByUsername加载的数据库的密码进行匹配(PasswordEncoder)
  • 认证成功跳转成功地址

 

posted @ 2020-08-20 16:17  还在学习的小王呀  阅读(251)  评论(0)    收藏  举报