2016-02-14 77 views
1

故宮我已經安裝的Spring Security如下:使用Spring Security和@Secured

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(securedEnabled = true) 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

@Autowired 
private MongoUserDetailsService userServiceDetails; 

@Autowired 
private BCryptPasswordEncoder bCryptEncoder; 

@Override 
public void configure(WebSecurity web) throws Exception { 
    web.ignoring().antMatchers("/js/**", "/css/**", "/fonts/**"); 
} 

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 
      .authorizeRequests() 
       .anyRequest().authenticated() 
       .and() 
      .csrf().disable() 
      .formLogin() 
       .defaultSuccessUrl("/index", true) 
       .loginPage("/login") 
       .permitAll() 
       .and() 
      .httpBasic() 
      .and() 
      .logout() 
       .permitAll() 
       .deleteCookies("JSESSIONID") 
       .invalidateHttpSession(true); 
} 

@Autowired 
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
    auth 
     .userDetailsService(userServiceDetails) 
     .passwordEncoder(bCryptEncoder); 
} 

而且我控制器上我有以下幾點:

@RequestMapping(method = RequestMethod.GET) 
@Secured({"ADMIN"}) 
public List<Item> getItems(@RequestBody filter filter) { 

    if (filter.hasMissingField()) { 
     return new ArrayList<>(); 
    } 

    return service.getItems(filter); 
} 

在用戶詳細信息的記錄對象具有角色需要(在調試):

enter image description here

但是,我一得到403 - 禁止。我看不出爲什麼。如果我刪除了@Secured,那麼我可以訪問該頁面,但使用@Secured({「ADMIN」})會失敗。

我已經梳理過SO,並且發現與@Secured not working at all有關的錯誤,與@Secured having no effects at the Controller level有關的錯誤,但不像我目前的情況,它無法授權所需的角色出現。

如果它有幫助我使用Spring Boot 1.3.2。

任何幫助將不勝感激。由於

+1

你需要說'@Secured({ 「ROLE_ADMIN」})'呢? – gerrytan

+0

謝謝@gerrytan工作。我不知道必須爲角色添加前綴。謝謝你救了我一堆;) – user1609848

回答

5

你必須把@Secured({"ROLE_ADMIN"})ROLE_前綴

+0

謝謝..由於聲譽,不能投票你,但你的意見絕對解決了這個問題。謝謝。 – user1609848

相關問題