1.本示例中使用cas4.0+cas-client-core3.4版本,ide则是myeclipse2014 blue版本,mvn使用3.9版本css
2.注意事项:请先实现破解cas-client-core,https请求证书的限制html
3.在pom.xml引入cas-client-core.jar,并用破解版替换mvn仓库版本java
4.web.xml配置web
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>cas-client-demo</display-name> <filter> <filter-name>CAS Single Sign Out Filter</filter-name> <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> <!--SSO认证根地址--> <init-param> <param-name>casServerUrlPrefix</param-name> <param-value>https://xxx.cn:7143/cas</param-value> </init-param> </filter> <listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> </listener> <filter> <filter-name>CAS Authentication Filter</filter-name> <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> <!--SSO登陆地址--> <init-param> <param-name>casServerLoginUrl</param-name> <param-value>https://xxx.cn:7143/cas/login</param-value> </init-param> <!--本系统根地址--> <init-param> <param-name>serverName</param-name> <param-value>https://localhost:7143</param-value> </init-param> <init-param> <description>不拦截的请求</description> <param-name>ignorePattern</param-name> <param-value>/js/*|/img/*|/view/*|/css/*|/sys/*</param-value> </init-param> </filter> <filter> <filter-name>CAS Validation Filter</filter-name> <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class> <init-param> <param-name>casServerUrlPrefix</param-name> <param-value>https://xxx.cn:7143/cas</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>https://localhost:7143</param-value> </init-param> <init-param> <param-name>redirectAfterValidation</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>useSession</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <!-- <init-param> <param-name>acceptAnyProxy</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>proxyReceptorUrl</param-name> <param-value>/sample/proxyUrl</param-value> </init-param> <init-param> <param-name>proxyCallbackUrl</param-name> <param-value>https://mmoayyed.unicon.net:9443/sample/proxyUrl</param-value> </init-param> --> <init-param> <param-name>authn_method</param-name> <param-value>mfa-duo</param-value> </init-param> </filter> <!--SSO退出地址--> <context-param> <param-name>casServerLogoutUrl</param-name> <param-value>https://xxx.cn:7143/cas/logout</param-value> </context-param> <!--本系统根地址--> <context-param> <param-name>serverName</param-name> <param-value>https://localhost:7143</param-value> </context-param> <filter> <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class> </filter> <filter> <filter-name>CAS Assertion Thread Local Filter</filter-name> <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS Single Sign Out Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CAS Authentication Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CAS Validation Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>CAS Assertion Thread Local Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <!-- 本地默认登录页面 --> <welcome-file>sys/index.jsp</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
5.webapp目录新建home,sys文件夹session
5.1sys文件夹添加index.jsp文件app
代码以下框架
<%@page contentType="text/html;charset=UTF-8" %> <%@page pageEncoding="UTF-8" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>CAS-Demo-不须要认证界面</title> </head> <body> <p> 本页面内可完成自定义登陆功能 </p> </body> </html>
5.2home添加index.jsp,代码以下eclipse
<%@page contentType="text/html;charset=UTF-8" %> <%@page pageEncoding="UTF-8" %> <%@ page import="java.util.Map" %> <%@ page import="java.util.Iterator" %> <%@ page import="java.util.List" %> <%@ page import="org.jasig.cas.client.authentication.AttributePrincipal" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>CAS-Demo</title> </head> <body> <h3>Cas-Client接入示例.</h3> <hr> <p> <b>用户:<%= request.getRemoteUser() %></b> <% //此处默认使用了单点退出,实际操做根据实际的项目框架特色来调整,思路参考SignOut.jsp %> <a href="logout.jsp" title="退出">退出</a> </p> <% if (request.getUserPrincipal() != null) { AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal(); final Map attributes = principal.getAttributes(); if (attributes != null) { Iterator attributeNames = attributes.keySet().iterator(); out.println("<b>Attributes:</b>"); if (attributeNames.hasNext()) { out.println("<hr><table border='3pt' width='100%'>"); out.println("<th colspan='2'>Attributes</th>"); out.println("<tr><td><b>Key</b></td><td><b>Value</b></td></tr>"); for (; attributeNames.hasNext(); ) { out.println("<tr><td>"); String attributeName = (String) attributeNames.next(); out.println(attributeName); out.println("</td><td>"); final Object attributeValue = attributes.get(attributeName); if (attributeValue instanceof List) { final List values = (List) attributeValue; out.println("<strong>Multi-valued attribute: " + values.size() + "</strong>"); out.println("<ul>"); for (Object value : values) { out.println("<li>" + value + "</li>"); } out.println("</ul>"); } else { out.println(attributeValue); } out.println("</td></tr>"); } out.println("</table>"); } else { out.print("No attributes are supplied by the CAS server.</p>"); } } else { out.println("<pre>The attribute map is empty. Review your CAS filter configurations.</pre>"); } } else { out.println("<pre>The user principal is empty from the request object. Review the wrapper filter configuration.</pre>"); } %> </body> </html>
5.3home添加logout.jspwebapp
<%@page contentType="text/html" %> <%@page pageEncoding="UTF-8" %> <%@ page import="java.util.Map" %> <%@ page import="java.util.Iterator" %> <%@ page import="org.jasig.cas.client.authentication.AttributePrincipal" %> <% //断定退出类型 Boolean isSsoLogout=true; if(isSsoLogout){ //单点退出模式 //本地退出操做模拟 session.invalidate(); //调用单点退出接口 response.sendRedirect(application.getInitParameter("casServerLogoutUrl")+ "?service=" + application.getInitParameter("serverName") + "/cas-client-demo-1/home"); } else{ //本地退出模式 //本地退出操做模拟 session.invalidate(); //跳转至本地登陆页/ty/login.jsp response.sendRedirect("/ty/login.jsp"); } %>
5.4webapp下面添加index.jsp页面jsp
<%@page contentType="text/html;charset=UTF-8" %> <%@page pageEncoding="UTF-8" %> <%@ page import="java.util.Map" %> <%@ page import="java.util.Iterator" %> <%@ page import="java.util.List" %> <%@ page import="org.jasig.cas.client.authentication.AttributePrincipal" %> <% response.sendRedirect("/home"); %>
6.运行结果
sys/index.jsp页面不须要认证就能够进入
系统默认页面路径:sys/index.jsp
home以及其余访问路径下的请求须要认证