2016-04-28 19 views
0

私は春のMVCアプリケーションで作業しています。セキュリティを追加しようとしています。すべて正常に動作します。 DOC http://docs.spring.io/autorepo/docs/spring-security/4.0.4.RELEASE/reference/htmlsingle/#abstractsecuritywebapplicationinitializer-with-spring-mvcSpring 4 MVC +セキュリティの問題

に従って

は、次の実装を追加しました。

  1. MessageSecurityWebApplicationInitializer
  2. MessageWebApplicationInitializer
  3. SecurityConfig

ログインフォーム作品。

は成功の承認の後、持っている - HTTPステータス404から

また、私は承認後のAppControllerにメソッドをデバッグすることができ、私は次の方法public String listPatients(ModelMap model)を意味します。

なぜ私は404を持っていますか?私は何を修正すべきですか?

public class MessageSecurityWebApplicationInitializer 
     extends AbstractSecurityWebApplicationInitializer { 
} 


public class MessageWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class[]{AppConfig.class}; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return new Class[]{AppConfig.class}; 
    } 


    @Override 
    protected String[] getServletMappings() { 
     return new String[] {"/*"}; 
    } 

} 

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth.inMemoryAuthentication().withUser("user").password("user").roles("USER"); 
    } 

    protected void configure(HttpSecurity http) throws Exception { 
     http 
       .authorizeRequests() 
       .anyRequest().authenticated() 
       .and() 
       .formLogin() 
       .and() 
       .httpBasic(); 
    } 

} 

@Controller 
@RequestMapping("/") 
public class AppController { 

    public static final String jsonPage = "json"; 
    @RequestMapping(value = {"/"}, method = RequestMethod.GET) 
    public String listPatients(ModelMap model) { 
     model.addAttribute("json", "test"}"); 
     return jsonPage; 
    } 

BR!

+0

私は春のセキュリティとログ記録をオンにするお勧めします+春M VCとそれが何をしているか見ることができます。 – Kurtymckurt

+1

まず、アプリケーションのロードを2回停止します。あなたの 'AppConfig'はルートとサーブレットの両方のコンテキストに対して' AppConfig'を読み込んで、アプリケーション全体を効果的に複製します。ルート(サービス、リポジトリ、インフラストラクチャ)とサーブレットコンテキスト(コントローラなどのWeb関連のもの)で設定を分割します。 –

+0

私は@ M.Deinumに同意します。起動時にログを確認すると、2つのコンテキストが作成されていることがわかります。それをしないで、あなたのconfigsを分割してください(下の私の答えをチェックしてください) –

答えて

0

これは私が(作業)したものである:

AppInitializer

public class AppInitializer extends 
     AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class[] { 
       SpringRootConfig.class, 
       DatabaseConfig.class, 
       SecurityConfig.class, 
       SecurityInitializer.class, 
       WsdlMarshallerConfig.class 
     }; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return new Class[] { SpringWebConfig.class }; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     return new String[] { "/" }; 
    } 

} 

SecurityInitializer

public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer { 
} 

SecurityConfig

@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private DataSource dataSource; 

    @Override 
    protected void configure(AuthenticationManagerBuilder auth) 
      throws Exception { 
     // @formatter:off 
     auth 
      .jdbcAuthentication() 
       .dataSource(dataSource) 
        .usersByUsernameQuery("SELECT username, password, enabled FROM users WHERE username = ?") 
        .authoritiesByUsernameQuery("SELECT username, role FROM user_roles WHERE username = ?"); 
     // @formatter:on 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     // @formatter:off 
     http 
      .authorizeRequests() 
       .antMatchers("/resources/**").permitAll() 
       .antMatchers("/login").permitAll() 
       .anyRequest().authenticated() 
       .and() 
      .formLogin() 
       .loginPage("/login") 
       .and() 
      .csrf() 
       .disable(); 
     // @formatter:on 
    } 

} 
関連する問題