现有项目1.a.com,我的项目2.a.com给3.a.com(页面)提供api,需要把3.a.com的页面嵌入到1.a.com里,有个通用的认证服务4.a.com,
也就是1.a.com认证后2.a.com就不需要认证了,整个流程中有些注意的地方。
1.所有请求都被拦截做身份认证,明明配置里有个路径是不需要authc的
map.put(casConfig.getApplicationPath()+"/sso/**", "defaultFilter");
map.put(casConfig.getApplicationPath()+"/cas", "cas");
map.put(casConfig.getApplicationPath()+"/logout", "logoutFilter");
map.put(casConfig.getApplicationPath()+"/**", "anon");
这个问题是由于defaultFilter,logoutFilter,cas这三个对应的filter是被注入到spring容器的,spring boot把这三个filter自动加到web filter了,并且拦截/*,所以导致所有请求都被拦截,这块在spring boot里需要我们手动new 在加到shiro的ShiroFilterFactoryBean中,
但是不清楚为什么在传统spring mvc模式可以注入......
2.对接中的跨域问题,这里涉及到cookie的同源策略,需要关注域名,就是在1.a.com认证通过后打开3.a.com的页面在访问2.a.com的时候,2.a.com是直接认证通过的,4.a.com认证通过后把cookie写到domain=.a.com,这样二级域为a.com的都能传递,所以必须得是同域
3.3.a.com调用2.a.com的接口认证通过后没有跳转到前一个url而是跳转到successurl,这不是我们想要的,发现调用的接口采用的是post请求,shiro要求get请求才会redicet到前一个请求,如果是post的请求会跳转到successurl,目前还不清楚post的该怎么处理