2016-12-05 36 views
0
@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    ... 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
      .authorizeRequests() 
       .antMatchers("/css/**", "/js/**", "/img/**").permitAll() 
       .anyRequest().authenticated() 
       .and() 
      .formLogin() 
       .loginPage("/login") 
       .loginProcessingUrl("/login") 
       .failureForwardUrl("/login?error") 
       .successForwardUrl("/admin") 
       .permitAll() 
       .and() 
      .logout() 
       .logoutSuccessUrl("/login?logout") 
       .permitAll(); 
    } 
} 

以上WebSecurityConfig只有當下面的類映射原理:註解@Controller沒有正確映射的Spring Security 4登錄頁面

@Configuration 
public class MvcConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
     registry.addViewController("/login").setViewName("login"); 
    } 

} 

當我試着和控制器替換上述映射,登錄請求處理不正確,並出現以下錯誤:

ERROR 290168 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet dispatcherServlet threw exception

這裏是我的控制器看起來像:

@Controller 
public class AdminController extends BaseController { 

    @RequestMapping(value = "/login") 
    public String login(Model model) { 
     return "login"; 
    } 
} 

任何想法,爲什麼而WebMvcConfigurerAdapter映射做的AdminController請求映射不起作用?

回答

0

發現此問題。這與映射不是WebSecurityConfig。用.failureForwardUrl()方法發生奇怪的事情。這裏是我的發現:


下,我看到

.formLogin() 
    .loginPage("/login") 
    .loginProcessingUrl("/loginProcess") 
    .successForwardUrl("/admin") 
    .failureForwardUrl("/login") 
    .permitAll() 
    .and() 

使用無效登錄失敗完全運行,導致錯誤,下面的代碼將離開用戶在/ loginProcess

.formLogin() 
    .loginPage("/login") 
    .loginProcessingUrl("/loginProcess") 
    .successForwardUrl("/admin") 
    .failureForwardUrl("/") 
    .permitAll() 
    .and() 

w ^如果登錄名無效,以下代碼將使用戶登錄/登錄?error

.formLogin() 
    .loginPage("/login") 
    .loginProcessingUrl("/loginProcess") 
    .successForwardUrl("/admin") 
    .permitAll() 
    .and() 
相關問題