那么可能正常获取票据后就带到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/";
}
并将对应的构造方法中对应的赋值去掉即可。