CAS server如何自定義Controller控制器

疯子110發表於2024-08-28

CAS server如何自定義Controller控制器

在實際開發過程中,CAS Server 4.0.0服務端提供了登入、認證等功能,但是我們希望加入更多的自定義功能,如自定義第三方登入服務等功能。

增加一個Controller類控制器以及修改部分配置來完成CAS Server 4.0.0自定義Controller擴充套件,廢話就不多說了,開始具體實現方法。

首先開啟CAS Server Web專案(cas-client-webapp),建立CasDemoController名稱的類檔案,將其放到cas-server-webapp/src/main/java/org/jasig/cas/controller目錄下,CasDemoController.java具體程式碼如下

package org.jasig.cas.controller;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
public class CasDemoController extends AbstractController {
@Override
	protected ModelAndView handleRequestInternal(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		ModelAndView model = new ModelAndView();
		MappingJackson2JsonView jsonView = new MappingJackson2JsonView();
		Map<String, Object> attributes = new HashMap<String, Object>();
		attributes.put("name", "素文宅部落格");
		attributes.put("site", "https://blog.yoodb.com/");
		jsonView.setAttributesMap(attributes);
		model.setView(jsonView);
		return model;
	}
}

分析:
CasDemoController類繼承AbstractController類並重寫了handleRequestInternal()方法,使用MappingJackson2JsonView類來構造jsonView物件值,返回json字串。

修改cas-servlet.xml配置檔案

cas-servlet.xml配置檔案所在cas-server-webapp/src/main/webapp/WEB-INF目錄。宣告自定義bean,增加CasDemoController類檔案配置資訊,具體如下:

<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
  <bean id="oauth20WrapperController"
    class="org.jasig.cas.support.oauth.web.OAuth20WrapperController"
    p:loginUrl="${server.prefix}/login" p:servicesManager-ref="servicesManager"
    p:ticketRegistry-ref="ticketRegistry" p:timeout="7200" />
    
<!-- 新增Controller -->
    <bean id="casDemoController" class="org.jasig.cas.controller.CasDemoController"/>

與此同時需要增加這個bean的對映路徑,具體配置如下:

<bean
      id="handlerMappingC"
      class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"
      p:alwaysUseFullPath="true">
    <property name="mappings">
      <util:properties>
      
      <prop key="/oauth2.0/*">oauth20WrapperController</prop>
      
      <prop key="/samlValidate">samlValidateController</prop>
      
        <prop key="/serviceValidate">serviceValidateController</prop>
        <prop key="/proxyValidate">proxyValidateController</prop>
        
        <prop key="/p3/serviceValidate">v3ServiceValidateController</prop>
        <prop key="/p3/proxyValidate">v3ProxyValidateController</prop>
        
        <prop key="/validate">legacyValidateController</prop>
        <prop key="/proxy">proxyController</prop>
        <prop key="/authorizationFailure.html">passThroughController</prop>
        <prop key="/status">healthCheckController</prop>
        <prop key="/statistics">statisticsController</prop>
        <prop key="/test">casDemoController</prop><!-- 對映方法(其實就是url跳轉地址)-->
      </util:properties>
    </property>
</bean>

最後修改web.xml檔案,該檔案目錄就沒必要多說了,新增對映方法,具體配置如下:

<servlet-mapping>
<servlet-name>cas</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>

注意事項:
/test中“test”名稱必須和上面casDemoController對映方法保持一致,cas中“cas”名稱必須和web.xml配置檔案中servlet名稱保持一致。

以上內容出自:點此載入原文

相關文章