这一段时间有同事在问CAS -Client的问题这里就基本问分析一下
1)由于CAS-Server 登录后客户端会记入自动session中(部署WebApp-Server)?
? ? 所以我们只需要获取对应的Principal 在获取其中的信息
?
2)根据Principal 注册登录
HttpServletResponse resp = (HttpServletResponse)response; HttpSession session = req.getSession(); if (session != null) { Object obj = session.getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION); if (obj != null) { Assertion assertion = (Assertion)obj; AttributePrincipal p= assertion.getPrincipal(); session.setAttribute("user", true); } }
?
3)定义权限过虑器
package com.zk.xx.login.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.jasig.cas.client.authentication.AttributePrincipal; import org.jasig.cas.client.util.AbstractCasFilter; import org.jasig.cas.client.validation.Assertion; /** * Servlet Filter implementation class LoginFilter * @author LiuQing * 2010-10-05 11:45:56 */ @WebFilter("/*") public class LoginFilter implements Filter { /** * Default constructor. */ public LoginFilter() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest)request; //String uri = req.getServletContext().getContextPath(); String actionName = req.getServletPath(); //System.out.println(uri + " " + m); HttpServletResponse resp = (HttpServletResponse)response; HttpSession session = req.getSession(); if (session != null) { Object obj = session.getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION); if (obj != null) { Assertion assertion = (Assertion)obj; AttributePrincipal p= assertion.getPrincipal(); session.setAttribute("user", true); } } if ("/login".equals(actionName)) { req.getSession(true).setAttribute("user",true); } else if ("/logout".equals(actionName)) { if (req.getSession() != null) { req.getSession().removeAttribute("user"); } } if (req.getSession() == null || req.getSession().getAttribute("user") == null) { RequestDispatcher disp = req.getRequestDispatcher("/login.jsp"); disp.forward(req, resp); } else { chain.doFilter(req, resp); } } }
?
4)web.xml 文件
?
<?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_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>demo1</display-name> <context-param> <param-name>serverName</param-name> <param-value>http://localhost:1010</param-value> </context-param> <filter> <filter-name>SsoSession</filter-name> <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> </filter> <filter> <filter-name>CAS Authentication Filter</filter-name> <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> <init-param> <param-name>casServerLoginUrl</param-name> <param-value>https://localhost/cas/login</param-value> </init-param> <init-param> <param-name>ignorePattern</param-name> <param-value>http://localhost:1010/demoSSn01/login.jsp|/static/css/|/static/js/|http://localhost:1010/demoSSn01/$|http://localhost:1010/demoSSn01/login$|http://localhost:1010/demoSSn01/logout$</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://localhost/cas</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:1010</param-value> </init-param> </filter> <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>SsoSession</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 Assertion Thread Local Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
?
?
?
?
?
?
?
原文:http://mianhuaman.iteye.com/blog/2224250