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クライアント依存パッケージ を追加
2.アプリケーションでアドレス情報を設定.propertiesファイルでは、次のように構成されています.
3.casフィルタ構成
5.ローカルフィルタを定義し、単一のログインサーバからユーザーアカウントを取得し、ログインしたユーザーアカウントをセッションに保存する役割を果たす.(CASサービス側は認証に合格した後、現在の認証に合格したログインユーザ名をサブシステムに渡す.もちろん、認証に合格したユーザ名はサブシステムのユーザ名と異なる可能性がある.そのサブシステムには認証に合格したユーザ名とサブシステムのユーザのマッピングが必要であり、サブシステムで認証に合格したユーザ名を取得し、対応するサブシステムのユーザを見つける)
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/
kweb-cas(5.2.x)に基づいてSpringbootプロジェクトを統合します.
コンフィギュレーション
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.アクセス