码迷,mamicode.com
首页 > 编程语言 > 详细

Spring Security @PreAuthorize 拦截无效

时间:2018-10-31 12:36:38      阅读:491      评论:0      收藏:0      [点我收藏+]

标签:web   uil   turn   map   manager   配置   protect   figure   page   

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

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

@Configuration
@EnableWebSecurity
public 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,则需要在配置文件中加上:

<security:global-method-security pre-post-annotations="enabled" proxy-target-class="true" />

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

并且需要提供以下方法:

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

才可正常拦截。

Spring Security @PreAuthorize 拦截无效

标签:web   uil   turn   map   manager   配置   protect   figure   page   

原文地址:https://www.cnblogs.com/ifindu-san/p/9882124.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!