CAS单点登录重定向service参数硬编码

简介: 先说下问题,cas单点登录地址会带入service参数,这个参数可能会被有心人利用修改浏览器地址栏带入自己的重定向地址,例如:http://localhost:6212/cas/login?service=http://www.a.com
那么可能正常获取票据后就带到a了,当然有心人会伪造“类同源域名”,这个时候需要将自己需要的重定向地址硬编码到程序中。

源码发现这个参数service并不是单纯的String 而是一个

public interface Service extends Principal {
    
    void setPrincipal(Principal principal);
    
    boolean logOutOfService(String sessionIdentifier);
    
    boolean matches(Service service);
}

public interface Principal extends Serializable {

    /**
     * Returns the unique id for the Principal
     * @return the unique id for the Principal.
     */
    String getId();
    
    /**
     * 
     * @return
     */
    Map<String, Object> getAttributes();
}

发现没有set方法,查询了网上很多方法,在login-webflow.xml中修改,但是一直没有成功。
后来一路跟代码…
解决:
AbstractWebApplicationService类中修改两处:

public final String getId() {
        if(!dif(this.id)){
            return ConstantsForDic.url;
        }
        return this.id;
    }

protected final String getOriginalUrl() {
        if(!dif(this.originalUrl)){
            return ConstantsForDic.url;
        }
        return this.originalUrl;
    }

    public boolean dif(String id){
        if(org.apache.commons.lang.StringUtils.isEmpty(id)){
            return true;
        }else {
            int len = id.indexOf(".xxx.com/");//不包含时为-1  这里20也是自己约束的从http://开始数
            if(len<20 && len >0){
                return true;
            }
        }
        return false;
    }


public class ConstantsForDic {
    public static final String url= "http://boss.xxx.com/boss/";
}

并将对应的构造方法中对应的赋值去掉即可。

相关文章
|
Java
http访问springboot接口出现401 、403、 Forbidden 错误解决方法
http访问springboot接口出现401 、403、 Forbidden 错误解决方法
2233 0
|
8月前
|
微服务
jeecg微服务项目调用接口报错Token验证失效的解决方法
jeecg微服务项目调用接口报错Token验证失效的解决方法
|
5月前
|
Go 开发者
【应用服务 App Service】App Service发生错误请求时,如何查看IIS Freb日志,从中得知错误所发生的模块,请求中所携带的Header信息
【应用服务 App Service】App Service发生错误请求时,如何查看IIS Freb日志,从中得知错误所发生的模块,请求中所携带的Header信息
|
5月前
|
安全 Java 应用服务中间件
【Azure 应用服务】App Service中,为Java应用配置自定义错误页面,禁用DELETE, PUT方法
【Azure 应用服务】App Service中,为Java应用配置自定义错误页面,禁用DELETE, PUT方法
【Azure 应用服务】App Service中,为Java应用配置自定义错误页面,禁用DELETE, PUT方法
|
5月前
|
API
【Azure 应用服务】在App Service中调用外部服务API时需要携带客户端证书,而多次调用的情况下会出现WindowsCryptographicException Keyset does not exist异常
【Azure 应用服务】在App Service中调用外部服务API时需要携带客户端证书,而多次调用的情况下会出现WindowsCryptographicException Keyset does not exist异常
|
7月前
|
缓存 NoSQL Java
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
132 5
|
8月前
|
XML JSON Java
SpringBoot 配置文件编写及使用方式 (拒绝硬编码)
SpringBoot 配置文件编写及使用方式 (拒绝硬编码)
67 0
|
Web App开发 缓存 前端开发
前端项目根据环境设置请求地址和接口代理,以及解决多个localhost服务token被覆盖
一般开发项目除了正式的生产环境,还会有对应的开发环境、测试环境和预发布环境,每个环境所访问的接口地址肯定不一样,如果自己一个个手动修改那就太不程序猿了
775 1
|
Java
Springboot配置全局跨域未生效,接口访问报错解决方法
Springboot配置全局跨域未生效,接口访问报错解决方法
1341 0
|
前端开发 JavaScript API
后端接口临时补救方案:Mock Server
后端接口临时补救方案:Mock Server
428 0