我想将用户的lang存储在数据库中。因此,我扩展了LocaleChangeInterceptor,并将旧版本与新的区域设置进行比较。
如果更改,我想更新数据库中的用户属性。但是身份验证对象没有自动连接。
有什么想法吗?
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);
}
}
}
答案 0 :(得分:2)
我认为Authentication
不是由spring管理的,所以您可以尝试使用以下代码来获取Authentication
。
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();