springsecurity过滤全部后放行特定的请求和遇到的坑

 

在使用spirngsecurity的时候相信大家都遇到过,只有几个界面用户能访问然后把特定的几个界面放行给所有用户

spirngsecurity是支持这样做的,那么按照顺序来

  http.authorizeRequests()
                .antMatchers("/*").hasRole("user")
                .antMatchers("/").permitAll()

这个时候发现任何请求根目录403了,这是为什么呢?

其实我们在这么做的时候必须把第一行得代码,也就是拦截所有请求放到最后边,不然在它之后的开放权限(permitAll())并没有生效,正确顺序

  http.authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/*").hasRole("user")
            

这就结束了吗?并没有,我访问了/login和/regist  确实被拦截了,因为没有权限,但是这时候我访问了show/2(restful风格传参),却能进去

这是因为  /*   只代表   /请求   但是不代表     /请求/子请求   所以正确操作是改成/**

  http.authorizeRequests()
                .antMatchers("/").permitAll()
                .antMatchers("/**").hasRole("user")
            

 

同理如果我想放行/show请求,因为我restful风格传参,所以应该放行   /show/*

别忘了放行静态资源

 

你可能感兴趣的:(JAVA,1024程序员节)