问题详情
controller代码
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private LoginUserMapper loginUserMapper;
@PreAuthorize("hasAnyRole('ROLE_DEV','ROLE_PM')")
@GetMapping("/index")
public String index(){
return "index";
}
@PreAuthorize("hasAnyRole('ROLE_ADMIN')")
@GetMapping("/admin")
public String admint(){
return "index";
}
@PostMapping
public String postTest(){
return "111";
}
@GetMapping
public String getAll(){
final List<LoginUser> loginUsers = loginUserMapper.selectList(null);
System.out.println(loginUsers);
return null;
}
}
security配置
@Override
protected void configure(HttpSecurity http) throws Exception {
http.formLogin()// 自定义自己编写的登录页面
.loginPage("/login.html") //登录页面设置
.loginProcessingUrl("/user/login") //登录访问的路由路径 表单提交处理登录逻辑的路由 具体逻辑由security自己做了,我们只用写上地址
.defaultSuccessUrl("/test/index").permitAll() //登录成功后认证成功的跳转路径
.and().authorizeRequests()//可以自定义哪些被保护哪些不被保护
.antMatchers("/", "/test/hello", "/user/login")//第一个是索引,后面是路由
.permitAll()//设置哪些路径可以直接访问,不需要认证
.anyRequest().authenticated()//拦截所有请求
.and().csrf().disable();
}
直接访问不了/test/index
主要是因为@PreAuthorize("hasAnyRole('ROLE_DEV','ROLE_PM')")
,删掉之后就能访问了
个人理解
在写了权限认证的注解后,security默认需要登录之后才有资格进行权限验证,所以如果检测到未登录,就算是方向的路由也会被拦截,跳转到登录页面