一、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
二、配置文件
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
* spring security 配置
* @author Administrator
*
*/
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled=true)//允许全局的方法注解,(开启Security注解,写在controller里面的方法上面直接可以加注解)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
/**
* 配置用户认证
*/
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication() //写在内存中的
.withUser("java1234")
.password("123456")
.roles("ADMIN");//角色一定要加
}
/**
* 请求授权
*SpringSecurity对跨域、。。。的请求要求都比较高
*csrf():不允许跨域请求,同时这里去掉其他的配置,否则很容易报错,影响开发进度
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().cors().disable().headers().disable()
.authorizeRequests()
.antMatchers("/","/static/**","/film/**","/webSite/**","/webSiteInfo/**","/aboutMe").permitAll() // 配置不需要身份认证的请求地址
.anyRequest().authenticated() // 其他所有访问路径需要身份认证
.and()
.formLogin()
.loginPage("/login") // 指定登录请求地址
.defaultSuccessUrl("/admin") // 登录成功后的默认跳转页面
.permitAll() //允许执行前面所有的
.and()
.logout()
.logoutSuccessUrl("/login") //与上面那个/login不一样,上面的是请求的后台
.permitAll();
}
}
三、案例演示:
1、启动项目,发现在项目启动时就依次加载了下面两个config方法:
2、先在浏览器地址栏请求 admin后台管理页面:
回车后,由于当前用户尚未登录,也就与上图第一个config方法中不相符,因此
浏览器页面会自动跳到登录页面:
用户名密码错误后:
正确登录后,地址栏变为localhost/admin,这个地址是登录之前 请求的一个地址,因此可以说它有个记忆的功能,当你登录成功后,去请求你之前访问的地址:
代码地址:
SpringSecurity小demo代码地址链接