一、引入依赖
<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{
/*** 配置用户认证*/@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication() //写在内存中的.withUser("java1234").password("123456").roles("ADMIN");//角色一定要加}/*** 请求授权*SpringSecurity对跨域、。。。的请求要求都比较高*csrf():不允许跨域请求,同时这里去掉其他的配置,否则很容易报错,影响开发进度 */@Overrideprotected 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代码地址链接