实测可行,具体如下
Java 代码:
// 单点登录测试
@RequestMapping(value = "sso")
public String sso(HttpServletRequest request, HttpServletResponse response) throws IOException {
String userName = request.getParameter("username");
String password = request.getParameter("password");
String loginURL = null;
String hostName = http://test.com;
URL url = new URL(hostName + "/names.nsf?Login");
HttpURLConnection.setFollowRedirects(false);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(urlConnection.getOutputStream());
wr.write("username=" + userName + "&password=" + password);
wr.flush();
wr.close();
urlConnection.connect();
Map<String, List<String>> headerFields = urlConnection.getHeaderFields();
for (Iterator<String> it = headerFields.keySet().iterator(); it.hasNext();) {
String key = it.next();
if (key != null && key.equals("Set-Cookie")) {
String value = urlConnection.getHeaderField(key);
String[] cookies = value.split(";\\s*");
for (int i = 0; i < cookies.length; i++) {
String[] cookie = cookies[i].trim().split("=");
if (cookie[0].equals("DomAuthSessId")) {
loginURL = hostName + "/domcfg.nsf/SSOLoginAction?OpenAgent";
loginURL += "&cookeName=DomAuthSessId";
loginURL += "&cookeValue=" + cookie[1];
loginURL += "&redirectTo=" + hostName + "/test.nsf/test?openform&count=10&start=1";
break;
}
}
}
}
urlConnection.disconnect();
return "redirect:" + loginURL;
}
Domino代码:
在domcfg中增加代理SSOLoginAction
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim cookieName As String
Dim cookieValue As String
Dim redirectTo As string
Set db = session.currentdatabase
Set doc = session.DocumentContext
cookieName = getParameter(doc.Query_String_Decoded(0),"cookeName")
cookieValue = getParameter(doc.Query_String_Decoded(0),"cookeValue")
redirectTo = getParameter(doc.Query_String_Decoded(0),"redirectTo")
Print {P3P: CP="NON DSP COR CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONa HISa TELa OTPa OUR UNRa IND UNI COM NAV INT DEM CNT PRE LOC"}'针对ie的第3方cookie写入限制
Print {Set-Cookie:} + cookieName$ + {=} + cookieValue$ + {; path=/}
Print {Location: } + redirectTo$ + {}