Я думаю, что ваша конфигурация имеет проблемы
<security:http auto-config="true">
<security:intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<security:form-login login-page="/login"
login-processing-url="/loginProcess"
default-target-url="<home-page-url. ex: /home>"
authentication-failure-url="/login?login_error=1" />
<security:logout logout-url="/logout" logout-success-url="/logoutSuccess" />
</security:http>
default-target-url
должен указывать на страницу по умолчанию, на которую приложение должно перенаправлять после успешного входа в систему.
EDITED
После повторного прохождения требуемой публикации, я думаю, что подход заключается в том, чтобы заставить контроллер обрабатывать /login
запрос для обработки обоих случаев
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class AppsController {
@RequestMapping("/login")
public ModelAndView view(HttpServletRequest request,
HttpServletResponse response) {
Authentication authentication = SecurityContextHolder.getContext()
.getAuthentication();
User user = authentication != null
&& authentication.getPrincipal() instanceof User ? (User) authentication
.getPrincipal() : null;
return user == null ? getLoginModelAndView() : getHomeModelAndView();
}
private ModelAndView getHomeModelAndView() {
return null;
}
private ModelAndView getLoginModelAndView() {
return null;
}
}
Если в сеансе нет аутентифицированного пользователя, контроллер вернет страницу входа, но как только пользователь войдет в систему, он вернется на другую страницу.
Spring Security будет кэшировать записи, используемые для пользовательского сеанса, и его можно получить с помощью SecurityContextHolder
.