因为做了单点登录,就报这个错误 ? pay attention to any unsaved data !
用的什么单点登录技术?
我使用的是idp
我只要打开服务提供者,身份验证就报这个错误!
使用了 nginx 之类的转发吗?另外,请提供一下 idp 和 sp 的相关 log。
用的是tomcat!
好的!能否看看相关 log!
身份认证和服务层的!
注意 app.log 中的这几行:
2019-09-25 20:34:29.744 DEBUG [http-nio-8080-exec-12] com.haulmont.addon.idp.idp.sys.IdpServlet - GET "/app/idp/?sp=http%3A%2F%2Flocalhost%3A8080%2Fapp", parameters={masked}
2019-09-25 20:34:29.957 INFO [http-nio-8080-exec-12/app-core/server] com.haulmont.cuba.security.auth.AuthenticationManagerBean - Logged in: 0867b489-5e80-1e24-ed7b-72716bda06ae [admin]
2019-09-25 20:34:30.272 WARN [http-nio-8080-exec-12/app/admin] com.haulmont.addon.idp.idp.controllers.IdpController - Incorrect serviceProviderUrl http://localhost:8080/app passed, will be used default
2019-09-25 20:34:30.272 ERROR [http-nio-8080-exec-12/app/admin] com.haulmont.addon.idp.idp.controllers.IdpController - IDP property cuba.idp.serviceProviderUrls is not set
2019-09-25 20:34:30.278 DEBUG [http-nio-8080-exec-12] com.haulmont.addon.idp.idp.sys.IdpServlet - Completed 500 INTERNAL_SERVER_ERROR
2019-09-25 20:34:33.764 DEBUG [http-nio-8080-exec-18] com.haulmont.addon.idp.idp.sys.IdpServlet - GET "/app/idp/?sp=http%3A%2F%2Flocalhost%3A8080%2Fapp", parameters={masked}
2019-09-25 20:34:33.789 WARN [http-nio-8080-exec-18/app/admin] com.haulmont.addon.idp.idp.controllers.IdpController - Incorrect serviceProviderUrl http://localhost:8080/app passed, will be used default
2019-09-25 20:34:33.794 ERROR [http-nio-8080-exec-18/app/admin] com.haulmont.addon.idp.idp.controllers.IdpController - IDP property cuba.idp.serviceProviderUrls is not set
2019-09-25 20:34:33.794 DEBUG [http-nio-8080-exec-18] com.haulmont.addon.idp.idp.sys.IdpServlet - Completed 500 INTERNAL_SERVER_ERROR
2019-09-25 20:34:34.485 DEBUG [http-nio-8080-exec-8] com.haulmont.addon.idp.idp.sys.IdpServlet - GET "/app/idp/?sp=http%3A%2F%2Flocalhost%3A8080%2Fapp", parameters={masked}
2019-09-25 20:34:34.502 WARN [http-nio-8080-exec-8/app/admin] com.haulmont.addon.idp.idp.controllers.IdpController - Incorrect serviceProviderUrl http://localhost:8080/app passed, will be used default
2019-09-25 20:34:34.506 ERROR [http-nio-8080-exec-8/app/admin] com.haulmont.addon.idp.idp.controllers.IdpController - IDP property cuba.idp.serviceProviderUrls is not set
2019-09-25 20:34:34.506 DEBUG [http-nio-8080-exec-8] com.haulmont.addon.idp.idp.sys.IdpServlet - Completed 500 INTERNAL_SERVER_ERROR
这里说 serviceProviderUrls
配置有问题。
按照文档的说明,类似下面的配置,需要注意SP地址最后那个/,不能少了。
cuba.idp.serviceProviderUrls = http://fish:8081/app/,http://chips:8082/app/
cuba.idp.serviceProviderUrls = http://localhost:8080/app/,http://localhost:8000/app/,http://localhost:9000/app/ 就是这样配置的!
打开 SP 的时候,在浏览器地址栏输入地址时也要加上 /, 否则 /app/idp/?sp=http%3A%2F%2Flocalhost%3A8080%2Fapp
这串地址最后跟的 sp 地址会与 serviceProviderUrls
里面的地址匹配不上。
不用带后面那些,直接这样试试?
试了还是有问题,我的8080端口是身份认证与服务,8000和9000端口是提供服务的,通过8080端口进行登录,然后打开8000或者9000任意一个,8080端口就是上面的错误!
cuba.idp.serviceProviderUrlMasks 这个掩码的配置案例有没有,我猜测是这个问题!
cuba.idp.serviceProviderUrls = http://localhost:8080/app/,http://localhost:8000/app/,http://localhost:9000/app/ 这个配置能不能做成动态的,二不是死的!
这个配置可以用 mask 的配置作为补充,mask 的配置示例:
cuba.idp.serviceProviderUrlMasks =http://192.168.0.108:8081/app/.*,http://localhost:8081/app/.*
另外,你按照上面说的步骤做的时候,监控一下 8080 端口 sp 的 log,看看是否有错误日志。
依然报错,但是没有错误日志!!!