2015-10-10 57 views
0

我正在學習春季安全(基於Java的配置),我不能使註銷工作正常。當我點擊註銷時,我看到URL更改爲http://localhost:8080/logout並獲得「HTTP 404 - /註銷」。登錄功能工作正常(即使與自定義登錄表單)但註銷是問題,我懷疑重定向的url「localhost:8080 /註銷」應該像「本地主機:8080/springtest /註銷」404註銷與SpringMVC和SpringSecurity

我在關注一本書的組合以及這些例子: http://docs.spring.io/spring-security/site/docs/3.2.x/guides/hellomvc.html

我使用:

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>4.1.4.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>4.0.2.RELEASE</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-core</artifactId> 
     <version>4.0.2.RELEASE</version> 
     <scope>compile</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>4.0.2.RELEASE</version> 
     <scope>compile</scope> 
    </dependency> 

這是MVC初始化:

public class MvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

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

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

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

    @Override 
    protected Filter[] getServletFilters() { 
     return new Filter[] { new HiddenHttpMethodFilter() }; 
    } 
} 

而這個安全初始化程序:

public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer { 

} 

這個網絡配置:

@Configuration 
@EnableWebMvc 
@EnableTransactionManagement 
@ComponentScan(basePackages = { "org.munilvc.springtest" }) 
public class WebApplicationContextConfig extends WebMvcConfigurerAdapter { 

    @Bean(name = "viewResolver") 
    public InternalResourceViewResolver getViewResolver() { 
     InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
     viewResolver.setPrefix("/WEB-INF/views/"); 
     viewResolver.setSuffix(".jsp"); 
     return viewResolver; 
    } 

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

    // Serve static content like <mvc:resources/> tags 
    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/magic/").setCachePeriod(31556926); 
    } 

} 

這是安全性配置:

@Configuration 
@EnableWebMvcSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

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

也有一個家的控制器,我不知道這是做到這一點的最好方式,但我希望localhost:8080/springtest重定向到家,而Spring安全應該通過登錄頁面攔截。這現在對我很有用,但我想知道這是否是正確的方法?

@Controller 
public class HomeController { 

    @RequestMapping("/") 
    public String showLoginForm(Model model) { 
    return "home"; 
    } 

} 

最後,這是我的主頁登出:

 <p class="navbar-text navbar-right"> 
      Signed in as <a href="#" class="navbar-link">${pageContext.request.remoteUser}</a> 

     <form class="navbar-form pull-right" action="/logout" 
      method="post"> 
      <input type="hidden" name="${_csrf.parameterName}" 
       value="${_csrf.token}" /> <input type="submit" value="Log out" /> 
     </form> 

我需要爲退出做一個明確的要求映射?我已經從spring文檔中檢查了示例應用程序hellomvc-jc,但是我沒有看到任何明確的請求映射,所以我相信SpringSecurity 4已經照顧到了,不是嗎?

非常感謝!我真的很感激你的時間,我希望這可以幫助別人。

回答

1

使用action="logout"而不是action="/logout"

+0

謝謝詹姆斯Jithin,這個工作!我很確定我嘗試過那個,但是考慮到我嘗試過的配置/組合的數量,我不確定。 我的問題是,爲什麼我看到文檔仍然使用「/註銷」而不是「註銷」?我懷疑這是與視圖解析器還是一些請求映射有關? – munilvc