本文共 5074 字,大约阅读时间需要 16 分钟。
原文地址,转载请注明出处: ©
客户端整合cas之后,无论我们访问什么地址,只要没有发现票据,都会跳转到cas服务端去进行登录。有时候我们有这样的需求,用户不登录也可以访问某些网页,这个时候就需要用到AuthenticationFilter的忽略地址功能。为了方便测试,我用一张图片来测试。
如果只是简单的忽略地址,那很简单只要使用AuthenticationFilter的ignorePattern
参数,具体操作如下: 我的图片放在WEB-INF/images下,默认是无法直接访问的,所以在spring-mvc.xml中配置资源映射
CAS Filter org.jasig.cas.client.authentication.AuthenticationFilter casServerLoginUrl https://server.cas.com:8443/cas/login serverName http://app1.cas.com:8081 ignorePattern /js/*|/images/*|/view/*|/css/*
注意到上面的配置相对于之前,新增了ignorePattern 忽略的路径包含 /js 或者 /images 等,就这么简单就可以了.
springboot项目,我的图片放在resource/static/images下,配置映射如下:
@Configurationpublic class SpringMVC implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/images/**") .addResourceLocations("classpath:/static/images/"); }}
/** * 授权过滤器 * @return */@Beanpublic FilterRegistrationBean filterAuthenticationRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new AuthenticationFilter()); // 设定匹配的路径 registration.addUrlPatterns("/*"); MapinitParameters = new HashMap (); initParameters.put("casServerLoginUrl", CAS_SERVER_LOGIN_URL); initParameters.put("serverName", SERVER_NAME); initParameters.put("ignorePattern", "/js/*|/images/*|/view/*|/css/*"); registration.setInitParameters(initParameters); // 设定加载的顺序 registration.setOrder(1); return registration;}
#cas配置cas.server-url-prefix=https://server.cas.com:8443/cascas.server-login-url=https://server.cas.com:8443/cas/logincas.client-host-url=http://app2.cas.com:8082cas.ignore-pattern=/js/*|/images/*|/view/*|/css/*
上面那种方式是写死在配置文件里的,假如出现某种情况,前期是不需要登录就可以获取,后期可能改需求,需要登录之后才可以获取,这个时候不能 因为这个功能而且改需求吧,我们可以实现UrlPatternMatcherStrategy 接口来做,将内容存在数据库,请求过来时,可以查询数据库做判断。具体操作如下:
package com.wangsaichao.cas.config;import org.jasig.cas.client.authentication.UrlPatternMatcherStrategy;import java.util.regex.Pattern;/** * @author: wangsaichao * @date: 2018/8/7 * @description: 自定义鉴权路径 */public class SimpleUrlPatternMatcherStrategy implements UrlPatternMatcherStrategy { private Pattern pattern; @Override public boolean matches(String url) { //在此可以做额外的扩展,比如判断是insert也放行 可以通过查询数据库来进行动态判断 if(url.contains("/insert")){ return true; } //默认是根据cas.ignore-pattern来判断是否否满足过滤 return this.pattern.matcher(url).find(); } /** * 这个pattern就是 在application.properties中配置的cas.ignore-pattern * @param pattern */ @Override public void setPattern(String pattern) { this.pattern = Pattern.compile(pattern); }}
在matches方法内,可以进行扩展,可以进行查库操作,等等。setPattern的方法参数就是我们前面配置的ignorePattern参数值。会自动传过来。下面针对不同项目给出不同配置方式。主要是配置ignoreUrlPatternType
参数。
CAS Filter org.jasig.cas.client.authentication.AuthenticationFilter casServerLoginUrl https://server.cas.com:8443/cas/login serverName http://app1.cas.com:8081 ignorePattern /js/*|/images/*|/view/*|/css/* ignoreUrlPatternType com.wangsaichao.cas.config.SimpleUrlPatternMatcherStrategy
/** * 授权过滤器 * @return */@Beanpublic FilterRegistrationBean filterAuthenticationRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new AuthenticationFilter()); // 设定匹配的路径 registration.addUrlPatterns("/*"); MapinitParameters = new HashMap (); initParameters.put("casServerLoginUrl", CAS_SERVER_LOGIN_URL); initParameters.put("serverName", SERVER_NAME); initParameters.put("ignorePattern", "/js/*|/images/*|/view/*|/css/*"); initParameters.put("ignoreUrlPatternType", "com.wangsaichao.cas.config.SimpleUrlPatternMatcherStrategy"); registration.setInitParameters(initParameters); // 设定加载的顺序 registration.setOrder(1); return registration;}
在application.properties中添加以下内容
#cas配置cas.server-url-prefix=https://server.cas.com:8443/cascas.server-login-url=https://server.cas.com:8443/cas/logincas.client-host-url=http://app2.cas.com:8082cas.ignore-pattern=/js/*|/images/*|/view/*|/css/*cas.ignore-url-pattern-type=com.wangsaichao.cas.config.SimpleUrlPatternMatcherStrategy