在tomcat-7实例上,我启用了ApplicationA,ApplicationB和SSO vavle。这两个应用程序都是基于servlet的,并使用表单安全方法进行保护 当我使用Web浏览器时,SSO按预期工作:当我第一次打开ApplicationA时,系统会提示您输入用户名和登录名。在我通过登录表单后,我可以访问ApplicatioB而无需登录。
现在用例是:ApplicationA需要从ApplicationB请求一些内容。所以我在Web浏览器中打开ApplicationA并在登录表单中输入登录名和密码。之后,ApplicationA为ApplicationB创建HttpUrlConntection以获取一些内容,但它只获取ApplicationB的登录表单,因为它是一个未经过身份验证的新请求。 我希望在没有登录表单的情况下从ApplicationA访问ApplicationB以获取编程请求,因为我已经在浏览器中登录了SSO。
此外,我需要将ApplicationB中的内容作为ApplicationA中的String,因此我不使用requestDispatcher.include()。
有可能吗? 谢谢。
我尝试的是通过conn.setRequestProperty()将所有Cookie(有JSESSIONID和JSESSIONIDSSO之类的东西)和我的浏览器请求中的标题设置为HttpUrlConnection,但没有运气。
答案 0 :(得分:1)
为了强制执行单点登录,必须从同一客户端访问应用程序,而不是从不同的客户端访问。
因此,这是不可能的,因为您正在通过ApplicationA中的HttpUrlConnection访问ApplicationB,它现在充当类似于Web浏览器客户端的新客户端,尽管这两个应用程序都是由Tomcat启用的SSO。
此外,Tomcat不会设置在HttpUrlConnection客户端会话中设置Web浏览器客户端会话的cookie和标头,因为HTTP连接来自不同的客户端。