2016-09-15 52 views
0

我面臨着一些問題,在春季-security每當我在 點擊提交重定向到URL下,我得到了404映射未發現

HTTP Status 404 - for url 
localhost:8080/TestingSecurity/login 

我想有一個註冊springsecurity過濾

代碼ConfigurationDefaultXml.java

一些問題SecurityConfiguration.java

package cms.config; 
@Configuration 
@EnableWebSecurity 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 

    @Autowired 
    public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception { 
     auth.inMemoryAuthentication().withUser("user1").password("abc123").roles("USER"); 
     auth.inMemoryAuthentication().withUser("admin").password("root123").roles("ADMIN"); 
     auth.inMemoryAuthentication().withUser("dba1").password("root123").roles("ADMIN","DBA");//dba have two roles. 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 

     http.authorizeRequests() 
     .antMatchers("/", "/home").permitAll() 
     .antMatchers("/admin/**").access("hasRole('ADMIN')") 
     .antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')") 
     .and().formLogin().loginPage("/logincustom") 
     .usernameParameter("ssoId").passwordParameter("password") 
     .and().csrf() 
     .and().exceptionHandling().accessDeniedPage("/Access_Denied"); 

    } 
} 

SecurityWebApplicationInitializer.java

package cms.config; 

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = {"cms.controller"}) 
@Import(value = { SecurityConfiguration.class }) 
public class ConfigurationDefaultXml extends WebMvcConfigurerAdapter{ 

    @Bean 
    public ViewResolver jspviewResolver() { 
     InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
     viewResolver.setViewClass(JstlView.class); 
     viewResolver.setPrefix("/WEB-INF/views/"); 
     viewResolver.setSuffix(".jsp"); 
     return viewResolver; 
    } 

    @Bean 
    public ViewResolver contentNegotiatingViewResolver(
      ContentNegotiationManager manager) { 
     ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver(); 
     resolver.setContentNegotiationManager(manager); 

     // Define all possible view resolvers 
     List<ViewResolver> resolvers = new ArrayList<ViewResolver>(); 
     resolvers.add(jspviewResolver()); 
     resolver.setViewResolvers(resolvers); 
     return resolver; 
    } 


    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/design/"); 
    } 
} 

代碼包cms.config; SpringMvcInitializer.java的

import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; 

public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer{ 

} 

代碼

package cms.config; 

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; 

public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

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

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return null; 
    } 

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

} 

形式按鈕的編碼下面

<form action="${loginUrl}" method="post" class="form-horizontal"> 
          <c:if test="${param.error != null}"> 
           <div class="alert alert-danger"> 
            <p>Invalid username and password.</p> 
           </div> 
          </c:if> 
          <c:if test="${param.logout != null}"> 
           <div class="alert alert-success"> 
            <p>You have been logged out successfully.</p> 
           </div> 
          </c:if> 
          <div class="input-group input-sm"> 
           <label class="input-group-addon" for="username"><i class="fa fa-user"></i></label> 
           <input type="text" class="form-control" id="username" name="ssoId" placeholder="Enter Username" required> 
          </div> 
          <div class="input-group input-sm"> 
           <label class="input-group-addon" for="password"><i class="fa fa-lock"></i></label> 
           <input type="password" class="form-control" id="password" name="password" placeholder="Enter Password" required> 
          </div> 
          <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" /> 

          <div class="form-actions"> 
           <input type="submit" 
            class="btn btn-block btn-primary btn-default" value="Log in"> 
          </div> 
         </form> 
+0

檢查方法是在後您的形式 – Nimesh

+0

@naman:是的,它是後我有包括表單按鈕中可以看到問題的代碼。 –

+0

你沒有設置'org.springframework.security.config.annotation.web.configurers.AbstractAuthenticationFilterConfigurer.loginProcessingUrl(String)',我不確定你有什麼(表單上的動作)是默認的。嘗試明確設置。 – Taylor

回答

1

給出儘管它不會被用作登錄位置牛逼的網址,你需要添加一個loginProcessingUrl爲您自定義登錄:

.formLogin().loginPage("/logincustom").loginProcessingUrl("/doLogin") 
    .usernameParameter("ssoId").passwordParameter("password") 
+0

謝謝你的答案..我改變了loginProcessingUrl(「/ doLogin」)到loginProcessingUrl(「/ login」),現在它的工作 –