java - LocaleChangeInterceptor 中 Autowiring 身份验证以将 lang 存储在数据库中不起作用

标签 java spring spring-boot spring-security

我想将用户的语言存储在数据库中。因此,我扩展了 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/

相关文章:

java - Jackson @JsonInclude(Include.ALWAYS) 适用于所有 child

java - JSP 和 Python 可以一起用于同一个数据库吗?

java - volatile 对象工作

java - 谁能解释一下 lockAtLeastFor = "PT1M45S"中提到的时间,lockAtMostFor = "PT2M"这里的 PT 是什么

javascript - thymeleaf 如何将 id 从下拉列表传递到另一个 html

java - indexOf 还是二进制搜索?

java - 为什么我的 spring boot @RequestMapping 不工作?

java - 如何在 Tomcat 日志文件夹中打印日志

mysql - Spring Hibernate MySQL 测试不回滚

java - Spring - server.connection-timeout 不起作用