接着二讲:之前是安装其源码的原理,在配置类里面,设置角色啊,路径权相匹配什么的,
那么问题来了,那么多用户我不可能手动在配置类一个个hasAnyRole,antMatchers。。。逗号分隔配置吧,想想Spring要一统江湖,也不会那么蠢,肯定有便捷的东西,比如注解
//角色必以ROLE开头
// @Secured("ROLE_tom") 大小写眼科区分角色必以ROLE开头
// //角色必以ROLE开头与否皆可
//@PreAuthorize("hasRole('tom')") 访问资源之前校验
// @PostAuthorize("hasRole('tom')") 访问资源之后校验
@PostMapping("/show")
public String show() {
return "redirect:show.html";
}
果然有,在某个资源上使用注解,设置权限,@PreAuthorize("hasRole('tom')")全等于@Secured("ROLE_tom"),如果角色和AuthorityUtils.commaSeparatedStringToAuthorityList("admin,normal,ROLE_tom,/show.html"));里面的相符合
就可以进行访问
https://www.cnblogs.com/wangbiaohistory/p/16245785.html 里面说了,有各种访问角色,匿名,管理员,认证,记住我这几种授权登录方式,我们来试试登陆后的记住我功能
@Autowired
private PersistentTokenRepository persistentTokenRepository;
配置类里面:
//记住我
http.rememberMe()
.userDetailsService(userDetailsService)
.tokenRepository(persistentTokenRepository);
/**
* springsecurity数据库配置
*/
@Configurable
@Component
public class ConfigSecurity {
@Autowired
private DataSource dataSource;
@Bean
public PersistentTokenRepository gePersistentTokenRepository(){
JdbcTokenRepositoryImpl jdbcTokenRepository=new JdbcTokenRepositoryImpl();
jdbcTokenRepository.setDataSource(dataSource);
//第一次启动要去建表,这里打开,后面再次启动就要关掉,不然会报错
jdbcTokenRepository.setCreateTableOnStartup(true);
return jdbcTokenRepository;
}
}
启动后就会在数据库创建一张表,用于记录最后一次登陆人的标记:
CREATE TABLE `persistent_logins` (
`username` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`series` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`token` varchar(64) COLLATE utf8mb4_general_ci NOT NULL,
`last_used` timestamp NOT NULL,
PRIMARY KEY (`series`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='username 用户名\r\nseries 主键\r\ntoken token\r\nlast_used 最后一次登陆时间\r\n';
有人说你怎么知道会自动创建表:jdbcTokenRepository.setCreateTableOnStartup(true);巧不巧,点进去看下哈哈哈,jdbc熟悉的身影有木有
csrf跨站伪造开启
.and().csrf().disable(); 把这行关闭
服务端有源码可知需要传递_csrf.token得值,每次访问必须携带才可以
测试springsecurity