一、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 security一个简单的登录权限就完成了,但是我们用户是写死的,显然不符合正常的项目,下一章我们需要用数据库,进行授权登录