我正在學習春季安全(基於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已經照顧到了,不是嗎?
非常感謝!我真的很感激你的時間,我希望這可以幫助別人。
謝謝詹姆斯Jithin,這個工作!我很確定我嘗試過那個,但是考慮到我嘗試過的配置/組合的數量,我不確定。 我的問題是,爲什麼我看到文檔仍然使用「/註銷」而不是「註銷」?我懷疑這是與視圖解析器還是一些請求映射有關? – munilvc