我想将用户的语言存储在数据库中。因此,我扩展了 LocaleChangeInterceptor 并将旧的区域设置与新的区域设置进行比较。
如果发生更改,我想更新数据库中的用户属性。但身份验证对象不会 Autowiring 。
有什么想法吗?
public class CustomLocaleChangeInterceptor extends LocaleChangeInterceptor {
@Autowired(required = false)
Authentication authentication;
@Autowired
UserService userService;
private String oldLanguage;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws ServletException {
oldLanguage = LocaleContextHolder.getLocale().toString();
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
String newLanguage = LocaleContextHolder.getLocale().toString();
// stores new user language if changed
if (authentication != null && oldLanguage != newLanguage) {
CurrentUser currentUser = (CurrentUser) authentication.getPrincipal();
User user = userService.getUserById(currentUser.getUser().getId());
user.setLang(newLanguage);
userService.save(user);
}
}
}
最佳答案
我不认为Authentication
是由spring管理的,所以你可以尝试使用以下代码来获取Authentication
。
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
关于java - LocaleChangeInterceptor 中 Autowiring 身份验证以将 lang 存储在数据库中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41580491/