一、spring security介绍

Spring Security是一个功能强大且可高度自定义的身份验证和访问控制框架。它是保护基于Spring的应用程序的事实上的标准。

Spring Security是一个专注于为Java应用程序提供身份验证和授权的框架。与所有Spring项目一样,Spring Security的真正强大之处在于它可以轻松扩展以满足自定义要求

 

二、集成spring security

第一步、引入依赖

<!--spring securuity-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

第二步、配置spring security

我们在项目下新建一个包security,在这个包下面新建配置类WebSecurityConfig,它继承WebSecurityConfigurerAdapter类,并在该类上添加@EnableWebSecurity注解。具体代码如下:

package com.example.common.security;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
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.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
 
/**
 * security配置类
 */
@Configuration
@EnableWebSecurity  //开启Security安全框架
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 
    /**
     * 访问权限的简单配置
     * 重写configure帆帆,通过formLogin方法配置启用默认页面
     * 通过failureUrl方法配置登陆失败返回的URL
     * 通过defaultSuccessUrl配置登陆成功的URL
     * 通过permitAll方法设置登陆页面全部权限可以访问
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception
    {
        http
                .formLogin()                          //启用默认登陆页面
                .failureUrl("/login?error")           //登陆失败的URL: /login?error
                .defaultSuccessUrl("/ayUser/test")   //登陆成功的URL
                .permitAll();
        super.configure(http);
    }
 
    /**
     * 配置内存用户
     * AuthenticationManagerBuilder类的方法inMemoryAuthentication可添加内存中的用户
     * 并可给用户指定角色权限
     * Security5默认要求密码使用加密,不加密的话就使用"{noop}123456"这样的写法,加密的话需要使用
     * PasswordEncoder的实现类进行加密
     * @param auth
     * @throws Exception
     */
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception
    {
        auth
                .inMemoryAuthentication()
                .withUser("小明").password("{noop}123456").roles("ADMIN")
                .and()
                .withUser("小花").password("{noop}123456").roles("USER");
    }

    /**
     * 如果使用springboot默认的静态资源路径,将不会生效
     * 必须在application.properties里面自定义静态资源路径之后才生效
     * spring.resources.static-locations=classpath:/static
     * spring.mvc.static-path-pattern=/static/**
     * @param web
     * @throws Exception
     */
    @Override
    public void configure(WebSecurity web) throws Exception {
        //设置静态资源不要拦截
        web.ignoring().antMatchers("/static/**");
    }
}
#自定义静态路径,springboot默认静态路径会失效
spring.resources.static-locations=classpath:/static
spring.mvc.static-path-pattern=/static/**

第三步、测试

启动项目,在浏览器输入访问链接,所有请求都会被security拦截并跳转到默认的登陆页面,如下图

spring boot整合spring security spring boot spring security_spring

在输入框输入错误的用户名和密码会跳转到之前配置的错误页面

spring boot整合spring security spring boot spring security_静态资源_02

输入正确的用户名和密码 

spring boot整合spring security spring boot spring security_自定义_03

至此,利用spring security一个简单的登录权限就完成了,但是我们用户是写死的,显然不符合正常的项目,下一章我们需要用数据库,进行授权登录