单点登录 CAS 5.* -如何单点退出

登录已经完成了,如何实现单点退出,即一处退出,处处退出。

在client增加类

import org.jasig.cas.client.session.SingleSignOutFilter;
import org.jasig.cas.client.session.SingleSignOutHttpSessionListener;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author: L.swallow
 * @Date: 2019/1/14 15:48
 */
@Configuration
public class CasConfig {

    /**
     * 用于实现单点登出功能
     */
    @Bean
    public ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> singleSignOutHttpSessionListener() {
        ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> listener = new ServletListenerRegistrationBean<>();
        listener.setEnabled(true);
        listener.setListener(new SingleSignOutHttpSessionListener());
        listener.setOrder(1);
        return listener;
    }

    /**
     * 该过滤器用于实现单点登出功能
     */
    @Bean
    public FilterRegistrationBean singleSignOutFilter() {
        FilterRegistrationBean filterRegistration = new FilterRegistrationBean();
        filterRegistration.setFilter(new SingleSignOutFilter());
        filterRegistration.setEnabled(true);
        filterRegistration.addUrlPatterns("/*");
        filterRegistration.addInitParameter("casServerUrlPrefix", "http://192.168.10.69:8080/singin");
        filterRegistration.addInitParameter("serverName","SingleSignOutFilter");
        filterRegistration.setOrder(3);
        return filterRegistration;
    }

//    @Bean
//    @Order(1)
//    public FilterRegistrationBean logoutFilter(){
//        FilterRegistrationBean bean= new FilterRegistrationBean();
//        SingleSignOutFilter filter= new SingleSignOutFilter();
//        filter.setCasServerUrlPrefix("http://localhost:8080/singin");
//        bean.setName("SingleSignOutFilter");
//        bean.setFilter(filter);
//        return bean;
//    }


}

修改LoginController

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.security.Principal;

/**
 * @Author: L.swallow
 * @Date: 2019/1/14 14:52
 */
@RestController
public class LoginController {

    @RequestMapping("login")
    public String login(HttpServletRequest request) {
        Principal principal = request.getUserPrincipal();
        return "Welcome to app1 " + principal.getName()+"<a href="http://192.168.10.69:8080/singin/logout?service=http://192.168.10.69:8081/loginout">
" +
                "     退出登录
" +
                "</a>";
    }
    @RequestMapping("loginout")
    public String loginout(HttpSession session) {
        session.invalidate();
        return "Login out success";
    }

}

  然后在8082子项目选择退出

刷新 8081子项目

已成功退出,刷新8082  其实也退出了

8082退出使用的

session.invalidate();重置session,
如若使用的shiro或者springsecret,没啥区别,调用其登出接口就OK
原文地址:https://www.cnblogs.com/lewskay/p/10268225.html