Это простая вещь, вы делаете ее сложной.
Я хотел бы создать разные токены для каждого анонимного пользователя.Возможно ли это
после того, как вы создадите действительный токен, пользователь станет аутентифицированным пользователем.
Вы можете подумать о проверке токена и установке ROLE='ROLE_ANONYMOUS'
.Как я уже сказал, это будет все равно, что сделать простую вещь сложной.Создание аутентифицированного пользователя для анонимного пользователя не очень хороший подход.Вы можете создать новую роль, такую как ROLE_SEMIANONYMOUS
, и предоставить полномочия, которые были открыты для пользователя ANONYMOUS.
(но этот подход не имеет для меня никакого смысла, поэтому я предлагаю альтернативную версию для достижения вашего требования идентификации AnonymousUser)
As Анонимный пользователь = Неаутентифицированный пользователь
Для анонимного пользователя, если вы напечатаете участника
String principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
принципал = "anonymousUser"
Вы можете создать сеанс для анонимного пользователя для его идентификации, как указано ниже
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Object principal = authentication.getPrincipal();
if(principal instanceof String && ((String)principal).equalsIgnoreCase("anonymousUser"))
{
if(request.getSession(false) == null)
{
HttpSession session = request.getSession();
session.setMaxInactiveInterval(300); // As per Your requirement
// store session id from session and ip address from request in to DB or cache if required and use it
}
else
{
//identify anonymous user against session id and strored details
}
}
Этого можно добиться, зарегистрировав фильтр
- В порядке конвективных пружинфильтра должно быть после springSecurityFilterChain.
- При весенней загрузке вы можете достичь этого на
FilterRegistrationBean