CAS server如何自定义Controller控制器
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名称保持一致。
以上内容出自: