博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Security @PreAuthorize 拦截无效
阅读量:5061 次
发布时间:2019-06-12

本文共 2332 字,大约阅读时间需要 7 分钟。

1. 在使用spring security的时候使用注解,@PreAuthorize("hasAnyRole('ROLE_Admin')")

放在对方法的访问权限进行控制失效,其中配置如:

@Configuration@EnableWebSecuritypublic class SecurityConfig extends WebSecurityConfigurerAdapter {     @Autowired    UserDetailsService userDetailsService;     @Bean    @Override    public AuthenticationManager authenticationManagerBean() throws Exception {        return super.authenticationManagerBean();    }     @Override    protected void configure(AuthenticationManagerBuilder auth) throws Exception {        auth.userDetailsService(userDetailsService);    }     @Override    protected void configure(HttpSecurity http) throws Exception {        http.csrf().disable()            .authorizeRequests()            .antMatchers("/res/**", "/login/login*").permitAll()            .anyRequest().authenticated()            .and().formLogin().loginPage("/login/login").defaultSuccessUrl("/")                .passwordParameter("password")                .usernameParameter("username")            .and().logout().logoutSuccessUrl("/login/login");    }}

Controller中的方法如下:

@Controller@RequestMapping("/demo")public class DemoController extends CommonController{    @Autowired    private UserService userService;     @PreAuthorize("hasAnyRole('ROLE_Admin')")    @RequestMapping(value = "user-list")    public void userList() {             }}

使用一个没有ROLE_Admin权限的用户去访问此方法发现无效。

修改一下 SecurityConfig:

  @Override   protected void configure(HttpSecurity http) throws Exception {       http.csrf().disable()           .authorizeRequests()           .antMatchers("/res/**", "/login/login*").permitAll()           .antMatchers("/demo/user-list").access("hasRole('ROLE_Admin')")           .anyRequest().authenticated()           .and().formLogin().loginPage("/login/login").defaultSuccessUrl("/")               .passwordParameter("password")               .usernameParameter("username")           .and().logout().logoutSuccessUrl("/login/login");   }

添加上:  

.antMatchers("/demo/user-list").access("hasRole('ROLE_Admin')")

可以被正常拦截,说明是方法拦截没有生效。

如果是基于xml,则需要在配置文件中加上:

换成Annotation方式以后,则需要使用 @EnableGlobalMethodSecurity(prePostEnabled=true) 注解来开启。

并且需要提供以下方法:

@Bean@Overridepublic AuthenticationManager authenticationManagerBean() throws Exception {  return super.authenticationManagerBean();}

才可正常拦截。

转载于:https://www.cnblogs.com/ifindu-san/p/9882124.html

你可能感兴趣的文章
[LeetCode] Candy
查看>>
Jmeter学习系列----3 配置元件之计数器
查看>>
jQuery 自定义函数
查看>>
jq 杂
查看>>
jquery datagrid 后台获取datatable处理成正确的json字符串
查看>>
作业一
查看>>
AJAX
查看>>
ActiveMQ与spring整合
查看>>
web服务器
查看>>
js数组操作大全
查看>>
创业者要处理好的10大关系
查看>>
佛教和道教对“妖”的差异
查看>>
[TimLinux] Python IDE工具
查看>>
[TimLinux] Python Django与WSGI的简介
查看>>
从其它系统登录到SharePoint 2010系统的单点登录
查看>>
ElMAH(ASP.NET错误日志记录与通知)系列文章-基础应用篇
查看>>
pexpect学习阶段
查看>>
做最多的,展示最好的
查看>>
会员未登录显示ID=1的会员信息 解决方案
查看>>
Git与Repo入门(转载)
查看>>