最近在搞CAS总是在不断的改进,每当往前迈进一步都会发现新问题。文采有限直接进入正题。
重写AuthenticationFilter类
/**过滤不拦截URL如果是多个用;隔开**/
public class AuthenticationFilter extends AbstractCasFilter {
.............
/**过滤不拦截URL如果是多个用;隔开**/
private String excludes = null;
private final String exclude_splitter = ";";
............
protected void initInternal(final FilterConfig filterConfig) throws ServletException {
.........
setExcludes(getPropertyFromInitParams(filterConfig,"excludes",null));
..........
}
public final void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse,final FilterChain filterChain) throws IOException, ServletException {
//增加过滤
if(exclude(request)){
filterChain.doFilter(request, response);
return;
}
}
private boolean exclude(final HttpServletRequest request){
String serviceUrl = request.getRequestURI();
if(excludes == null || serviceUrl == null) return false;
if(excludes.contains(exclude_splitter)) {
return excludeCore(serviceUrl);
} else {
return serviceUrl.contains(excludes);
}
}
private boolean excludeCore(String serviceUrl){
String all_excludes[] = excludes.split(exclude_splitter);
for(String exclude : all_excludes){
if(serviceUrl.contains(exclude)){
return true;
}
}
return false;
}
...........
public String getExcludes() {
return excludes;
}
public void setExcludes(String excludes) {
this.excludes = excludes;
}
}
上面是代码中实现,下面在web.xml中增加需要过来的文件即可。
<init-param>
<param-name>excludes</param-name>
param-value>/tools/;/VerificationCodeServlet</param-value>
</init-param>
如果多URL用“;”隔开。这样就可以实现url不通过cas认证。
客户端3.3.3完全不通过上面实现,只需要在web.xml文件直接配置即可。配置如下:
<init-param>
<param-name>ignorePattern</param-name>
<param-value>/tools/|/VerificationCodeServlet</param-value>
</init-param>
如果多个URL用“|”隔开。
感兴趣可以加QQ群:10043620一起学习一起进步