一、基础安装
因为安装需要去改配置很麻烦,下载也是非常麻烦的事,要写的字也挺多的,我就直接一套弄好的丢这上面。这边建议直接使用idea去启动。因为你如果用get去启动的话那么就会让你去修改maven的环境配置名称,还容易报出jdk的错。用idea就会修改启动更方便
百度网盘 请输入提取码密码1111
解压后直接用idea启动就好了。
二、登录
使用localhost:8443/cas/login登录。查看是否正常。
登录账号:admin
登录密码:ABCabc123
修改密码在cas-overlay-template-5.3\src\main\resources\application.properties的最下面的位置修改
登录成功后会进入到
三、需要单点登录的项目内配置。
web.xml处配置过滤器
<!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!-- 该过滤器用于实现单点登出功能,可选配置。 -->
<filter>
<filter-name>CASSingleSignOutFilter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CASSingleSignOutFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责用户的认证工作,必须启用它 -->
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<!--CAS登录地址-->
<param-value>http://localhost:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<!--这里的server是服务端的IP-->
<param-value>http://localhost:8080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
<filter>
<filter-name>CASValidationFilter</filter-name>
<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>http://localhost:8443/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://localhost:8080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASValidationFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->
<filter>
<filter-name>CASHttpServletRequestWrapperFilter</filter-name>
<filter-class>
org.jasig.cas.client.util.HttpServletRequestWrapperFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>CASHttpServletRequestWrapperFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 -->
<filter>
<filter-name>CASAssertionThreadLocalFilter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CASAssertionThreadLocalFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--======================================================================单点登录======================================================================-->
java代码部分
public class SsoExampleFilter extends AbstractAuthenticationProcessingFilter {
@Override
protected boolean requiresAuthentication(HttpServletRequest request, HttpServletResponse response) {
if (request.getRequestURI().indexOf("login") != -1) {
return true;
} else {
return false;
}
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String uri = request.getRequestURI();
HttpSession session = request.getSession();
try {
if (requiresAuthentication(request, response)) {
// 获取用户信息并自动登录
AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
String username = principal.getName();
AutoLoginHelper autoLoginHelper = (AutoLoginHelper) SpringBeanUtil.getBean("autoLoginHelper");
//String Name = autoLoginHelper.doAutoLogin("lisi", session);
String checkUserName = autoLoginHelper.doAutoLogin(username, session);
if (StringUtil.isNotNull(checkUserName)) {
// 自动登录成功,完成登录并继续处理当前请求
successfulAuthentication(request, response);
} else {
//String username = validateCookie(request, response);
// 自动登录失败,返回登录页面
response.sendRedirect("http://localhost:8443/cas/login");
return;
}
} else if (uri.indexOf("logout") != -1) {
// 用户退出登录,使当前Session失效
if (session != null) {
session.invalidate();
}
// 重定向到登录页面
//https://rz.ytvc.edu.cn/cas/login
response.sendRedirect("http://localhost:8443/cas/logout");
return;
} else {
// 处理非登录、非退出的请求,继续处理当前请求
chain.doFilter(request, response);
return;
}
} catch (Exception e) {
e.printStackTrace();
return;
}
}
private String validateCookie(HttpServletRequest request, HttpServletResponse response) {
// TODO 去验证系统验证用户是否登录,红色这里就是第三方提供的获取方法。
AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
return principal.getName();
//return request.getParameter("loginName");
}
@Override
protected boolean validatePassword(String username, String password) {
return false;
}
}
当时使用的是ekp去做的单点登录,可能会有点误差,到时候根据情况微调一下。
四、其他部分。
cas的登录页面可以根据自己要求修改,以及登录的账号密码可以修改,资料在cadn上都可以找得到。
我当时因为客户已经有自己的cas。所以登录页面以及cas获取mysql部分我没去做。看别人的发出来也没意思。