Springboot對接CAS服務(wù)端撮执,客戶端登錄登出,資源攔截舷丹,獲取登錄信息

本文基礎(chǔ):熟悉springboot抒钱,CAS服務(wù)端已配置好或第三方已提供。

一.添加pom依賴掂榔,我這里貼一下完整的pom

  <dependencies>
        <!-- Spring Boot Web 依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Spring Boot Test 依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Spring Boot Mybatis 依賴 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis-spring-boot}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!-- MySQL 連接驅(qū)動依賴 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql-connector}</version>
        </dependency>
        <!-- Junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <!-- 原始配置 -->
        <!-- 添加spring security cas支持 -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-cas</artifactId>
        </dependency>
        <!-- 添加sswagger2支持 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.2.2</version>
        </dependency>
    </dependencies>

二继效,CAS配置症杏,對接CAS服務(wù)端装获,代碼目錄如下:


1.png

三、具體代碼:
CasConfig.java:

package com.we.config;

import com.we.Application;
import org.apache.log4j.Logger;
import org.jasig.cas.client.authentication.AuthenticationFilter;
import org.jasig.cas.client.session.SingleSignOutFilter;
import org.jasig.cas.client.session.SingleSignOutHttpSessionListener;
import org.jasig.cas.client.util.HttpServletRequestWrapperFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import java.net.UnknownHostException;

@Configuration
public class CasConfig {
    private static Logger logger = Logger.getLogger(Application.class);
    @Value("${hostname}")
    private String hostname;
    @Bean
    public ServletContextInitializer servletContextInitializer(){
        return new ServletContextInitializer() {
            @Override
            public void onStartup(ServletContext servletContext) throws ServletException {
                servletContext.addListener(new SingleSignOutHttpSessionListener());
            }
        };
    }
    @Bean
    public FilterRegistrationBean registSingleSignOutFilter() throws UnknownHostException {
        String casServerLoginUrl = "http://100.000.000.000:8080/cas";
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new SingleSignOutFilter());
        registration.addUrlPatterns("/cas/*","/we/*");/
        registration.addInitParameter("casServerUrlPrefix",casServerLoginUrl);
        registration.setName("singleSignOutFilter");
        return registration;
    }
    @Bean
    public FilterRegistrationBean registAuthFilter(){
        String casServerLoginUrl = "http://100.000.000.000:8080/cas";
        String serverName = hostname;
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new AuthenticationFilter());
        registration.addUrlPatterns("/cas/*","/we/*");
        registration.addInitParameter("casServerLoginUrl",casServerLoginUrl);
        registration.addInitParameter("serverName", serverName);
        registration.setName("registAuthFilter");
        return registration;
    }
    @Bean
    public FilterRegistrationBean registTicketValidationFilter()
  {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        TBDSReceivingTicketValidationFilter filter = new TBDSReceivingTicketValidationFilter();
        registration.setFilter(filter);
        registration.addUrlPatterns("/cas/*","/we/*");
        String casServerUrlPrefix = "http://100.000.000.000:8080/cas";
        logger.info("casServerUrlPrefix : " +casServerUrlPrefix);
        registration.addInitParameter("casServerUrlPrefix", casServerUrlPrefix);
        String serverName = hostname;
        registration.addInitParameter("serverName", serverName);
        registration.setName("ticketValidationFilter");
        return registration;
    }
    @Bean
    public FilterRegistrationBean registWrapperFilter() 
  {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new HttpServletRequestWrapperFilter());
        registration.addUrlPatterns("/cas/*", "/html/*","/we/*");
        registration.setName("wrapperFilter");
        return registration;
    }
    @Bean
    public InternalResourceViewResolver viewResolver()
  {
        InternalResourceViewResolver viewResolver=new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/classes/views/");
        viewResolver.setSuffix(".html");
        viewResolver.setViewClass(JstlView.class);
        return viewResolver;
    }
}

TBDSReceivingTicketValidationFilter.java:

package com.we.config;

import org.jasig.cas.client.authentication.AttributePrincipal;
import org.jasig.cas.client.util.AssertionHolder;
import org.jasig.cas.client.validation.Assertion;
import org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TBDSReceivingTicketValidationFilter extends Cas20ProxyReceivingTicketValidationFilter {
    @Override
    public void onSuccessfulValidation(HttpServletRequest request,
                                       HttpServletResponse response, Assertion assertion)
    {
        AttributePrincipal principal = assertion.getPrincipal();
        logger.info(principal.getName()+"--------------------------------");
        AssertionHolder.setAssertion(assertion);//獲取用戶信息
    }
    @Override
    public void onFailedValidation(HttpServletRequest request, HttpServletResponse response) {
        logger.info("Failed to validate cas ticket");
    }
}

其他厉颤,在ui層獲取登錄用戶信息:

public String getSSOUser(){
        AttributePrincipal userPrincipal = (AttributePrincipal) httpServletRequest.getUserPrincipal();
        if (userPrincipal != null) {
            String userName = userPrincipal.getName();
            logger.info("userName============"+userName);
            return userName;
        } else {
            return "user is null";
        }
    }

addUrlPatterns配置需要攔截的靜態(tài)資源或URL的路徑穴豫。

代碼直接照搬即可,登出時前端調(diào)用logout?service=xxx,并同時清除cookie逼友。

完結(jié)精肃。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市帜乞,隨后出現(xiàn)的幾起案子司抱,更是在濱河造成了極大的恐慌,老刑警劉巖黎烈,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件习柠,死亡現(xiàn)場離奇詭異,居然都是意外死亡照棋,警方通過查閱死者的電腦和手機(jī)资溃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烈炭,“玉大人溶锭,你說我怎么就攤上這事》叮” “怎么了趴捅?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵垫毙,是天一觀的道長。 經(jīng)常有香客問我拱绑,道長露久,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任欺栗,我火速辦了婚禮毫痕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘迟几。我一直安慰自己消请,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布类腮。 她就那樣靜靜地躺著臊泰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚜枢。 梳的紋絲不亂的頭發(fā)上缸逃,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天,我揣著相機(jī)與錄音厂抽,去河邊找鬼需频。 笑死,一個胖子當(dāng)著我的面吹牛筷凤,可吹牛的內(nèi)容都是我干的昭殉。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼藐守,長吁一口氣:“原來是場噩夢啊……” “哼挪丢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卢厂,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤乾蓬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后慎恒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體任内,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年巧号,在試婚紗的時候發(fā)現(xiàn)自己被綠了族奢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡丹鸿,死狀恐怖越走,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤廊敌,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布铜跑,位于F島的核電站,受9級特大地震影響骡澈,放射性物質(zhì)發(fā)生泄漏锅纺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一肋殴、第九天 我趴在偏房一處隱蔽的房頂上張望囤锉。 院中可真熱鬧,春花似錦护锤、人聲如沸官地。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驱入。三九已至,卻和暖如春氯析,著一層夾襖步出監(jiān)牢的瞬間亏较,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工掩缓, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留雪情,地道東北人。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓拾因,卻偏偏與公主長得像旺罢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绢记,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,781評論 2 361