security 配置类
@EnableWebSecurity// 启用Sucerity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests() //方法有很多子方法,每个子匹配器将会按照声明的顺序起作用。
.antMatchers("/user/h1/**").permitAll() // antMatchers 指定资源路径,permitAll 放行,不进行拦截。
// .antMatchers( "/role/**").hasRole("role") //role 资源必须使用role角色才能访问
// .antMatchers( "/db/**").access("hasRole('ADMIN') and hasRole('DBA')") //同时满足两个角色才可以访问
.anyRequest().authenticated();//其余所有情况需要认证才可以访问
}
}
测试控制器
@RestController
@RequestMapping("/user")
public class AuthUserController extends BaseController {
@RequestMapping("/h1")
public String h1(){
return "user h1";
}
@RequestMapping("/h2")
public String h2(){
return "user h2";
}
}
测试
启动后,只有user/h1控制器可以访问,其他都不能进行访问。
登陆表单
http.formLogin(); 启用表单,则访问需要没有权限的资源则跳转到登陆页面。
解决跨域问题
//第1步:解决跨域问题。cors 预检请求放行,让Spring security 放行所有preflight request(cors 预检请求) http.authorizeRequests().requestMatchers(CorsUtils::isPreFlightRequest).permitAll();
不创建session
//第2步:让Security永远不会创建HttpSession,它不会使用HttpSession来获取SecurityContext
http.csrf().disable().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and().headers().cacheControl();
来源:oschina
链接:https://my.oschina.net/u/4157150/blog/4280435