2017-03-17 17 views
0

おはようございます。春のセキュリティアクセスが適切な役割で拒否されました

私は春のセキュリティレイヤーで春のmvcアプリケーションを手に入れました。 は、だから私は持っているすべてのユーザーのための良い/転送/ ** URLのアクセスを許可するようにセキュリティを設定した4つの役割

@Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.csrf() 
       .disable() 
       // For all static resources we got permissions 
       .authorizeRequests() 
       .antMatchers("/css/**", "/js/**", "/img/**","/font/**").permitAll() 
       // Good transfer 
       .antMatchers("/good_transfer/**").hasAnyRole(UserRole.ROLE_ASSEMBLER.name(),UserRole.ROLE_LOADER.name(),UserRole.ROLE_SHIPPER.name(),UserRole.ROLE_SELLER.name()) 
       .anyRequest().authenticated() 
       .and(); 

     http.formLogin() 
       // указываем страницу с формой логина 
       .loginPage("/login") 
       // указываем action с формы логина 
       .loginProcessingUrl("/j_spring_security_check") 
       // указываем URL при неудачном логине 
       .failureUrl("/login?error") 
       // Указываем параметры логина и пароля с формы логина 
       .usernameParameter("j_username") 
       .passwordParameter("j_password") 
       // даем доступ к форме логина всем 
       .permitAll(); 

     http.logout() 
       // разрешаем делать логаут всем 
       .permitAll() 
       // указываем URL логаута 
       .logoutUrl("/logout") 
       // указываем URL при удачном логауте 
       .logoutSuccessUrl("/") 
       // делаем не валидной текущую сессию 
       .invalidateHttpSession(true); 
    } 

私は役割ROLE_ASSEMBLERでユーザーのログイン名とパスワードでログインフォームを提出の一つと成功した後に私は/コントローラに落ちるログイン:

@Controller 
public class LoginController extends CommonController 
{ 
    @RequestMapping("/login") 
    public ModelAndView login() 
    { 
     return model("login"); 
    } 

    @RequestMapping("/") 
    public ModelAndView main(HttpServletRequest request) 
    { 
     String redirect = "login"; 

     if(request.isUserInRole(UserRole.ROLE_ASSEMBLER.name())||request.isUserInRole(UserRole.ROLE_LOADER.name())||request.isUserInRole(UserRole.ROLE_SHIPPER.name())||request.isUserInRole(UserRole.ROLE_SELLER.name())) 
     { 
      redirect = "good_transfer"; 
     } 
     return new ModelAndView("redirect:/"+redirect); 
    } 

} 

表現request.isUserInRole(UserRole.ROLE_ASSEMBLER.name())trueを返しますので、私は必要な役割を得ました。そのコントローラは/良い転送URLを私にリダイレクトした後、(私はそのURLのコントローラました):。

@Controller 
public class GoodTransferController extends CommonController 
{ 
    @RequestMapping("/good_transfer") 
    public ModelAndView getAssemblyList() 
    { 
     ModelAndView model = model("good-transfer"); 
     return model; 
    } 
} 

をしかし、私は... t each the controllerの方法:( それはアクセス拒否の例外をスローすることができます

このURLはROLE_ASSEMBLERユーザーに許可されなければならない理由。私は理解can`t。

を助けてください。

答えて

0

が最後にそれが仕事だ。

私のセキュリティ設定では、 "ROLE_"というプレフィックスのないユーザーロールが必要でした。

はそれを変更:

http.csrf() 
       .disable() 
       // For all static resources we got permissions 
       .authorizeRequests() 
       .antMatchers("/css/**", "/js/**", "/img/**","/font/**").permitAll() 
       // Good transfer 
       .antMatchers("/good_transfer/**").hasAnyRole(UserRole.ROLE_ASSEMBLER.role(),UserRole.ROLE_LOADER.role(),UserRole.ROLE_SHIPPER.role(),UserRole.ROLE_SELLER.role()) 
       .anyRequest().authenticated() 
       .and(); 

そして、それは仕事を始め!

関連する問題