Springboot集積CAS 5.2.x

33654 ワード

カスタムディレクトリのタイトルをここに書きます
  • Springboot集積CAS 5.2.x
  • 構成
  • 参照
  • Springboot集積CAS 5.2.x
    kweb-cas(5.2.x)に基づいてSpringbootプロジェクトを統合します.
    コンフィギュレーション
  • springbootプロジェクトpom.xmlにcasクライアント依存パッケージ
  • を追加
    
    
    	net.unicon.cas
    	cas-client-autoconfig-support
    	2.3.0-GA
    
    

    2.アプリケーションでアドレス情報を設定.propertiesファイルでは、次のように構成されています.
    cas.server-url-prefix=http://211.149.149.146:9090/cas
    #  CAS        
    cas.server-login-url=http://211.149.149.146:9090/cas/login
    #           www.member.com  host        ,   127.0.0.1
    cas.client-host-url=http://localhost:8082
    cas.validation-type=CAS
    

    3.casフィルタ構成
    import com.ksi.admin.filter.LocalUserInfoFilter;
    import net.unicon.cas.client.configuration.CasClientConfigurerAdapter;
    import net.unicon.cas.client.configuration.EnableCasClient;
    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.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter;
    import org.springframework.beans.factory.annotation.Value;
    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;
    import org.springframework.core.Ordered;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import javax.servlet.http.HttpSession;
    
    @Configuration
    @Controller
    @EnableCasClient
    public class FilterConfig extends CasClientConfigurerAdapter {
    
        @Value("${cas.server-url-prefix}")
        private String CAS_URL;
    
        @Value("${cas.client-host-url}")
        private String APP_URL;
    
        @Override
        public void configureAuthenticationFilter(FilterRegistrationBean authenticationFilter) {
            super.configureAuthenticationFilter(authenticationFilter);
            //authenticationFilter.getInitParameters().put("authenticationRedirectStrategyClass","com.patterncat.CustomAuthRedirectStrategy");
        }
    
    
        @Bean
        public ServletListenerRegistrationBean servletListenerRegistrationBean(){
            ServletListenerRegistrationBean  listenerRegistrationBean = new ServletListenerRegistrationBean();
            listenerRegistrationBean.setListener(new SingleSignOutHttpSessionListener());
            listenerRegistrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
            return listenerRegistrationBean;
        }
    
        /**
         *       
         *
         * @return
         */
        @Bean
        public FilterRegistrationBean singleSignOutFilter() {
            FilterRegistrationBean registrationBean = new FilterRegistrationBean();
            registrationBean.setFilter(new SingleSignOutFilter());
            registrationBean.addUrlPatterns("/*");
            registrationBean.addInitParameter("casServerUrlPrefix", CAS_URL);
            registrationBean.setName("CAS Single Sign Out Filter");
            registrationBean.setOrder(1);
            return registrationBean;
        }
    
        /**
         *       
         * @return
         */
        @Bean
        public FilterRegistrationBean AuthenticationFilter() {
            FilterRegistrationBean registrationBean = new FilterRegistrationBean();
            registrationBean.setFilter(new AuthenticationFilter());
            registrationBean.addUrlPatterns("/*");
            registrationBean.setName("CAS Filter");
            registrationBean.addInitParameter("casServerLoginUrl", CAS_URL);
            registrationBean.addInitParameter("serverName", APP_URL);
            registrationBean.setOrder(3);
            return registrationBean;
        }
    
        /**
         *       
         * @return
         */
        @Bean
        public FilterRegistrationBean cas20ProxyReceivingTicketValidationFilter() {
            FilterRegistrationBean registrationBean = new FilterRegistrationBean();
            registrationBean.setFilter(new Cas20ProxyReceivingTicketValidationFilter());
            registrationBean.addUrlPatterns("/*");
            registrationBean.setName("CAS Validation Filter");
            registrationBean.addInitParameter("casServerUrlPrefix", CAS_URL);
            registrationBean.addInitParameter("serverName", APP_URL);
            registrationBean.setOrder(4);
            return registrationBean;
        }
    
        /**
         *         
         * @return
         */
        @Bean
        public FilterRegistrationBean httpServletRequestWrapperFilter(){
            FilterRegistrationBean registrationBean = new FilterRegistrationBean();
            registrationBean.setFilter(new HttpServletRequestWrapperFilter());
            registrationBean.addUrlPatterns("/*");
            registrationBean.setName("CAS HttpServletRequest Wrapper Filter");
            registrationBean.setOrder(5);
            return registrationBean;
        }
    
    
        /**
         *       
         *
         * @return
         */
        @Bean
        public FilterRegistrationBean registrationBean() {
            FilterRegistrationBean registrationBean = new FilterRegistrationBean();
            registrationBean.setFilter(new LocalUserInfoFilter());
            registrationBean.addUrlPatterns("/*");
            registrationBean.setName("localUserInfoFilter");
            registrationBean.setOrder(2);
            return registrationBean;
        }
    
    
        //  
        @RequestMapping("/logout")
        public String logout(HttpSession session){
            session.invalidate();
            return "redirect:"+CAS_URL+"/logout?service="+APP_URL+"/admin/index.html";
        }
    	/**
         *  kweb-cas       
         * @param request
         * @return
         */
        @GetMapping(value = {"/logininfo"})
        public WrappedResult loginUser(HttpServletRequest request){
            Assertion assertion = (Assertion) request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
            if(assertion!= null){
                AttributePrincipal principal = assertion.getPrincipal();
                return  WrappedResult.successWrapedResult(principal.getName());
            }else {
                return null;
            }
        }
    }
    
    

    5.ローカルフィルタを定義し、単一のログインサーバからユーザーアカウントを取得し、ログインしたユーザーアカウントをセッションに保存する役割を果たす.(CASサービス側は認証に合格した後、現在の認証に合格したログインユーザ名をサブシステムに渡す.もちろん、認証に合格したユーザ名はサブシステムのユーザ名と異なる可能性がある.そのサブシステムには認証に合格したユーザ名とサブシステムのユーザのマッピングが必要であり、サブシステムで認証に合格したユーザ名を取得し、対応するサブシステムのユーザを見つける)
    import org.jasig.cas.client.authentication.AttributePrincipal;
    import org.jasig.cas.client.util.AbstractCasFilter;
    import org.jasig.cas.client.validation.Assertion;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.util.StringUtils;
    
    import javax.servlet.*;
    import javax.servlet.http.HttpServletRequest;
    import java.io.IOException;
    
    public class LocalUserInfoFilter implements Filter {
    
        Logger logger = LoggerFactory.getLogger(LocalUserInfoFilter.class);
    
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest request_ = (HttpServletRequest) request;
             String loginName = getAccountNameFromCas(request_);
            if (!StringUtils.isEmpty(loginName)) {
                logger.info("    :" + loginName);
                request_.getSession().setAttribute("loginName", loginName);
            }
    
            chain.doFilter(request, response);
        }
    
        public String getAccountNameFromCas(HttpServletRequest request) {
            Assertion assertion = (Assertion) request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
            if (assertion != null) {
                AttributePrincipal principal = assertion.getPrincipal();
                return principal.getName();
            } else
                return null;
        }
    }
    
    

    6.アクセス
  • http://xxx:port/xxx/logininfoログインユーザ
  • の表示
  • http://xxx:port/xxx/logoutログインを終了する
  • リファレンス
  • https://blog.csdn.net/letterss/article/details/102971134
  • https://www.cnblogs.com/jugglee/p/10564993.html
  • https://www.jianshu.com/p/9b50585ccec0
  • http://www.freesion.com/article/1681129932/