Использование SecurityContextHolder.getContext (). SetAuthentication (Authentication) выполняет свою работу, но обходит цепочку фильтров безопасности Spring, что открывает угрозу безопасности.
Например, скажем, в моем случае, когда пользователь сбросил пароль, я хотел, чтобы он снова перешел на панель управления без входа в систему. Когда я использовал вышеупомянутый подход, я перешел на панель мониторинга, но обошел мой фильтр параллелизма, который я применил, чтобы избежать одновременного входа в систему. Вот фрагмент кода, который делает эту работу:
UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(empId, password);
Authentication auth = authenticationManager.authenticate(authToken);
SecurityContextHolder.getContext().setAuthentication(auth);
Используйте атрибут login-processing-url вместе с простым изменением в web.xml
безопасности XML
<form-login login-page="/login"
always-use-default-target="false"
default-target-url="/target-url"
authentication-failure-url="/login?error"
login-processing-url="/submitLogin"/>
web.xml
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/submitLogin</url-pattern>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
Добавление этого фрагмента кода в web.xml фактически выполняет работу по переадресации вашего явного запроса пересылки, который вы сделаете во время автоматического входа в систему, и передачи его в цепочку фильтров безопасности Spring.
Надеюсь, это поможет