2012-02-23 4 views
1

У меня есть встроенное Spring-приложение Spring Security 3.0, подобное SSO, и внешнее приложение php, которое проходит проверку подлинности на моем SSO-сервере.Spring Security 3.0: запрос GET после аутентификации

Когда пользователь регистрируется в этом приложении, я хотел бы подтвердить его подлинность в приложении php.

Так что я сделал это:

....

public class CustomAuthenticationHandler extends SavedRequestAwareAuthenticationSuccessHandler { 

@Override 
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws ServletException, IOException { 

    DefaultHttpClient httpclient = new DefaultHttpClient(); 
    try { 
     HttpGet httpget = new HttpGet("http://localhost/phpapp/signin"); 
     httpget.setHeader("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"); 
     httpget.setHeader("Connection", "keep-alive"); 
     httpget.setHeader("Referer", "http://localhost:8080/;jsessionid="+request.getSession().getId()); 
     httpget.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); 
     httpget.setHeader("Accept-Language", "en-gb,en;q=0.5"); 
     httpget.setHeader("Accept-Encoding", "gzip, deflate"); 
     httpget.setHeader("Cookie", "JSESSIONID="+request.getSession().getId()); 

     HttpResponse res = httpclient.execute(httpget); 

    } finally { 
     httpclient.getConnectionManager().shutdown(); 
    } 
} 
} 

в обработчике после аутентификации я создал запрос "GET" против зарегистрировались для PHP приложение. Когда он выполняется, возвращается в теле запроса «страница входа», как пользователь, не регистрируется. Примечание I:

httpget.setHeader("Referer", "http://localhost:8080/;jsessionid="+request.getSession().getId()); 

как текущий аутентифицированный jsessionid.

Но если я поместил ту же ссылку: http://localhost/phpapp/signin как обычно ссылку href на странице после аутентификации и щелкнуть ее, это нормально.

Любая идея, почему не работает такой же запрос в фильтре?

ответ

0

Это, скорее всего, связано с Путь Печенья. Файлы cookie привязаны к субдомену, домену, пути и порту, поэтому, если оба приложения не работают на http://localhost/phpapp/, у вас возникнут проблемы. Вы можете попробовать изменить Spring, чтобы не устанавливать элементы пути или порта в файле cookie, а просто привязывать его к localhost.

Однако я настоятельно рекомендую вам применить другой подход, как настоящий сингл в системе, вместо того, чтобы пытаться прокси-файлы cookie между приложениями.

Смежные вопросы