基于注解的访问控制
Spring Security提供了一些访问控制的注解,但默认不用,需要在启动类上添加@EnableGlobalMethodSecurity(xxEnabled=true)注解才能使用
@Secured
@Secured注解专门用来判断是否具有角色,可以写在方法或类上,要求参数要以ROLE_开头
- 启动类
@SpringBootApplication
@EnableGlobalMethodSecurity(securedEnabled=true)
public class MyApp{
public static void main(String[] args){
SpringApplication.run(MyApp.class,args);
}
}
- 注解使用
@Controller
public class MyController{
@Secured("ROLE_user")
@RequestMapping("/main")
public String toMain(){
return "redirect:/main.html";
}
}
@PreAuthorize / @PostAuthorize
@PreAuthorize用来判断访问的方法或类在执行之前的权限,可以写在方法或类上
@PostAuthorize用来判断访问的方法或类在执行之后的权限,可以写在方法或类上
这两个注解的参数和access()参数取值相同,都为权限表达式
- 启动类
@SpringBootApplication
@EnableGlobalMethodSecurity(prePostEnabled=true)
public class MyApp{
public static void main(String[] args){
SpringApplication.run(MyApp.class,args);
}
}
- 注解使用
@Controller
public class MyController{
@PreAuthorize("hasRole('user')") //与access()不同的是,这里可以添加ROLE_ @PreAuthorize("hasRole('ROLE_user')")
@RequestMapping("/main")
public String toMain(){
return "redirect:/main.html";
}
}
Remember Me功能
Remember Me功能是自动将用户信息存储到数据源,在用户不清理cookie及未过期的情况下,实现免登录访问
实现方式:
- 编写配置类
@Configuration
public class RememberMeConfig{
@AutoWired
private DataSource dataSource;
@Bean
public PersistentTokenRepository getPersistentTokenRepository(){
JdbcTokenRepositoryImpl jdbcTokenRepositoryImpl=new JdbcTokenRepositoryImpl();
jdbcTokenReposityoryImpl.setDataSource(dataSource);
//储存rememberme信息
jdbcTokenRepository.setCreateTableOnS
}
}
- 修改SecurityConfig配置类
- 在页面中添加复选框