单页网站排名没有苏州建设工程信息网
单页网站排名没有,苏州建设工程信息网,安阳做网站,天津市做网站公司最近一直在研究cas登录中心这一块的应用#xff0c;分享一下记录的一些笔记和心得。后面会把cas-server端的配置和重构#xff0c;另外还有这几天再搞nginxcas的https反向代理配置#xff0c;以及cas的证书相关的知识分享出来。 Cas由两部分组成#xff0c;Cas Server和Cas… 最近一直在研究cas登录中心这一块的应用分享一下记录的一些笔记和心得。后面会把cas-server端的配置和重构另外还有这几天再搞nginxcas的https反向代理配置以及cas的证书相关的知识分享出来。 Cas由两部分组成Cas Server和Cas Client。Cas Server是Cas自己的服务端而Cas Client是Cas客户端往往客户端需要和我们具体的业务系统进行集成这里我们主要详述cas 客户端的配置以及实例 第一步 我们得有一个现成的web项目然后我们要加入cas-client-core-xxx.jar到classpath maven项目用这个 dependencygroupIdorg.jasig.cas.client/groupIdartifactIdcas-client-core/artifactIdversion3.3.3/version
/dependency 这里我使用 cas-client-core-3.3.3.jar顺便推荐一个用来搜索和下载引用包的网站我一般从这里下载引用包http://mvnrepository.com/artifact/org.jasig.cas.client/cas-client-core/3.3.3 第二步配置单点登录Filter和注销监听器/过滤器 我们需要在应用的web.xml文件中配置四个Filter这四个Filter必须按照固定的顺序来进行配置而且它们必须配置在应用的其它Filter之前。它们的先后顺序要求如下1、AuthenticationFilter 2、TicketValidationFilter 3、HttpServletRequestWrapperFilter 4、AssertionThreadLocalFilter 1.1、 配置AuthenticationFilter 1.1.1、AuthenticationFilter有两个必须指定的参数 casServerLoginUrl用来指定Cas Server登录地址serverName或service用来指定认证成功后需要跳转地址。 补充 service和serverName一般只需要指定一个如果都指定了参数service将具有更高的优先级即以service指定的参数值为准。 service和serverName的区别 service指定的是一个确定的URL认证成功后就会确切的跳转到service指定的URL serverName用来指定主机名格式为{http/https}:{主机名}:{端口号} 如https://localhost:8335当指定的是serverName时AuthenticationFilter将会把它附加上当前请求的URI以及对应的查询参数来构造一个确定的URL如指定serverName为“http://localhost”而当前请求的URI为“/login”查询参数为“user123pwd123”则对应认证成功后的跳转地址将为“http://localhost/login?user123pwd123”。 AuthenticationFilter可以指定如下可选参数 renew当指定renew为true时在请Cas Server时将带上参数“renewtrue”默认为false。 gateway指定gateway为true时在请求Cas Server时将带上参数“gatewaytrue”默认为false。 artifactParameterName指定ticket对应的请求参数名称默认为ticket。 serviceParameterName指定service对应的请求参数名称默认为service。 例如我是这样配置的 filterfilter-namecasAuthenticationFilter/filter-namefilter-classorg.jasig.cas.client.authentication.AuthenticationFilter/filter-classinit-paramparam-namecasServerLoginUrl/param-nameparam-valuehttps://cas.eguid.cn:8335/cas-server//param-value/init-paraminit-paramparam-nameserverName/param-nameparam-valuehttp://sso.eguid.cn:8080//param-value/init-param/filterfilter-mappingfilter-namecasAuthenticationFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping 1.2、配置TicketValidationFilter 请求通过AuthenticationFilter的认证之后如果请求中携带了参数ticket则将会由TicketValidationFilter来对携带的ticket进行校验。 TicketValidationFilter只是对验证ticket的这一类Filter的统称其并不对应Cas Client中的一个具体类型。 Cas Client中有多种验证ticket的Filter都继承自AbstractTicketValidationFilter它们的验证逻辑都是一致的都有AbstractTicketValidationFilter实现不同的是使用的TicketValidator不一样。这里我们使用Cas10TicketValidationFilter也可以使用Cas20ProxyReceivingTicketValidationFilter或者Saml11TicketValidationFilter。 filterfilter-namecasTicketValidationFilter/filter-namefilter-classorg.jasig.cas.client.validation.Cas10TicketValidationFilter/filter-classinit-paramparam-namecasServerUrlPrefix/param-nameparam-valuehttps://cas.eguid.cn:8335/cas-server//param-value/init-paraminit-paramparam-nameserverName/param-nameparam-valuehttp://sso.eguid.cn:8080//param-value/init-param/filterfilter-mappingfilter-namecasTicketValidationFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping 必须指定的参数 casServerUrlPrefix 用来指定Cas Server对应URL地址的前缀如上面示例的“https://cas.eguid.cn:8335/cas-server。 serverName或service与前面的用法相同。 可选参数redirectAfterValidation 表示是否验证通过后重新跳转到该URL但是不带参数ticket默认为true。useSession 在验证ticket成功后会生成一个Assertion对象如果useSession为true则会将该对象存放到Session中。如果为false则要求每次请求都需要携带ticket进行验证显然useSession为false跟redirectAfterValidation为true是冲突的。默认为true。exceptionOnValidationFailure 表示ticket验证失败后是否需要抛出异常默认为true。renew 当值为true时将发送“renewtrue”到Cas Server默认为false。 1.3、配置HttpServletRequestWrapperFilter HttpServletRequestWrapperFilter用于将每一个请求对应的HttpServletRequest封装为其内部定义的CasHttpServletRequestWrapper该封装类将利用之前保存在Session或request中的Assertion对象重写HttpServletRequest的getUserPrincipal()、getRemoteUser()和isUserInRole()方法。这样在我们的应用中就可以非常方便的从HttpServletRequest中获取到用户的相关信息。 filterfilter-namecasHttpServletRequestWrapperFilter/filter-namefilter-classorg.jasig.cas.client.util.HttpServletRequestWrapperFilter/filter-class/filterfilter-mappingfilter-namecasHttpServletRequestWrapperFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping1.4、配置AssertionThreadLocalFilter AssertionThreadLocalFilter可以在应用的其它地方获取Assertion对象找个过滤器会把Assertion对象存放到当前的线程变量中我们在程序的任何地方都可以从线程变量中获取当前Assertion就不需要再从Session或request中进行解析了。这个线程变量是由AssertionHolder持有的我们在获取当前的Assertion时也只需要通过AssertionHolder的getAssertion()方法获取即可如 Assertion assertion AssertionHolder.getAssertion(); 我是这样配置的 filterfilter-namecasAssertionThreadLocalFilter/filter-namefilter-classorg.jasig.cas.client.util.AssertionThreadLocalFilter/filter-class/filterfilter-mappingfilter-namecasAssertionThreadLocalFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping1.5、配置单点注销监听器和过滤器用于统一注销 !-- 单点注销监听器 --
listener
listener-classorg.jasig.cas.client.session.SingleSignOutHttpSessionListener/listener-class
/listener
!-- 单点注销过滤器 --
filterfilter-namecaslogoutFilter/filter-namefilter-classorg.jasig.cas.client.session.SingleSignOutFilter/filter-class
/filter
filter-mappingfilter-namecaslogoutFilter/filter-nameurl-pattern/*/url-pattern
/filter-mapping 当你真的登录成功后你会发现你回不到原来页面了怎么办其实我们只要在前端给他一个参数就行了可以这样简单实现这个功能 //登录中心url
var loginCenter https://cas.eguid.cn:8335/cas-server;
function getUrl() {var hostname location.href;return hostname;
}
//登陆
function login() {location.href loginCenter /login?service getUrl();
}
//登录中心执行登出操作
function logoutServ()
{alert(开始登出);var loginUrl loginCenter /login?service getUrl();location.href loginCenter /logout?service loginUrl;
}在页面上的你得有登录和退出两个按钮分别调用login()和logoutServ()方法。 其实这里还有个小问题就是虽然你在cas-server端注销了你会发现它依然会认为你现在是登录状态所以没有拦截你的请求。 这是因为它时基于session验证的你的server端session已经注销了但是客户端应用这里的session还没有注销 一般我们会使用共享session的方法解决这个问题另外有个简单的方法就是你可以在后台写个用来注销当前用户session的接口。 转载于:https://www.cnblogs.com/eguid/p/10195648.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88505.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!