为什么在Spring Boot中注销不能正常工作

时间:2017-05-03 19:08:55

标签: java spring spring-mvc spring-security

我使用AngulaJS作为font-end,使用Sprint Boot作为后端。在这里,我正在使用REST API。为了构建注销服务,我已经按照以下教程进行了操作,但是它没有用。

URL-based authorization

Spring Security logout does not work - does not clear security context and authenticated user still exists

我还看到了其他一些网页,基于这些教程,我构建了以下代码。但它没有用。我有4个浏览器。 IE,Microsoft Edge,Firefox和Chrome。大多数时候我使用谷歌浏览器。大多数时候谷歌Chrome都会出现问题。 我正在使用带有Tomcat服务器的Net-Beans IDE。

我也尝试过简单的" session.invalidate();"

     @Override
    protected void configure(HttpSecurity http) throws Exception 
    {
        http
                .httpBasic()
                .and()
                .authorizeRequests()
                .antMatchers("/topics","/").permitAll()
                .anyRequest().authenticated()
                .and()
                .logout()
                .clearAuthentication(true)
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .logoutSuccessUrl("/topics")
//                .deleteCookies("JSESSIONID")
//                .deleteCookies("remember-me")
                .deleteCookies()
                .invalidateHttpSession(true);

    }

当输入注销URL时," logoutSuccessUrl(" / topics")"正在工作,它正在返回数据。

在这里,我尝试了所有这些3" deleteCookies()"方法。

我也试过" Proggrammatically logout"正如其中一个教程所提到的那样。(第二个链接)

以编程方式注销

@RequestMapping(value = {"/logout"}, method = RequestMethod.POST)
public String logoutDo(HttpServletRequest request,HttpServletResponse response){
HttpSession session= request.getSession(false);
    SecurityContextHolder.clearContext();
         session= request.getSession(false);
        if(session != null) {
            session.invalidate();
        }
        for(Cookie cookie : request.getCookies()) {
            cookie.setMaxAge(0);
        }

    return "logout";
}

0 个答案:

没有答案