Весенняя охрана + запомни вопрос + калитка - PullRequest
0 голосов
/ 25 мая 2010

Я использую калитку 1.4.7 + пружина 3.0 + пружина безопасности 3.0

Проблема в том, что Spring Security аутентифицирует пользователя с помощью cookie (служба запомнить меня), но AuthenticatedWebSession Wicket не может этого понять и заполняет панель входа. Как я могу решить это?

Спасибо.

1 Ответ

1 голос
/ 10 марта 2011

Довольно старый вопрос, но я наткнулся на него во время исследования точно такой же проблемы. Так что, если кто-то еще сталкивался с этим, вот мое решение.

Проблема в том, что AuthenticatedWebSession # isSignedIn () игнорирует SecurityContext и вместо этого проверяет свой собственный логический флаг. Поскольку невозможно переопределить последний метод #isSignedIn (), должен быть обходной путь. Я выбрал пользовательский WebRequestCycle, переопределяющий #onBeginRequest (), для синхронизации состояния непосредственно перед тем, как Wicket начинает обрабатывать текущий запрос:

// MyApplication.java
public MyApplication extends AuthenticatedWebApplication {

  // SNIP

  @Override
  public RequestCycle newRequestCycle(final Request request, final Response response) {
    return new WebRequestCycle(this, (WebRequest) request, (WebResponse) response) {
      @Override
      protected void onBeginRequest() {
        MySession.get().updateSignIn();
      }
    };
  }

}

// MySession.java
public class MySession extends AuthenticatedWebSession {

  // SNIP

  void updateSignIn() {
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    signIn(auth != null && auth.isAuthenticated());
  }

}

В качестве альтернативы, AuthenticatedWebSession и AuthenticatedWebApplication могут быть полностью отменены, так как остальные роли wicket-auth-ролей не требуют их. Для того, чтобы все работало одинаково, требуется только некоторое дублирование кода от AuthenticatedWebApplication.

...