[英]How to autowire SecurityContextRepository by class implementation
我正在嘗試使用我在上面接過的代碼進行Ajax登錄,這是:
@Controller
@RequestMapping("/login")
public class AjaxLoginController {
@Autowired
@Qualifier("AuthenticationManager")
AuthenticationManager authenticationManager;
@Autowired
SecurityContextRepository repository;
@Autowired
RememberMeServices rememberMeServices;
@RequestMapping(method=RequestMethod.GET)
public void login() {}
@RequestMapping(method=RequestMethod.POST)
@ResponseBody
public String performLogin(
@RequestParam("j_username") String username,
@RequestParam("j_password") String password,
HttpServletRequest request, HttpServletResponse response)
{
UsernamePasswordAuthenticationToken token =
new UsernamePasswordAuthenticationToken(username, password);
try {
Authentication auth = authenticationManager.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(auth);
repository.saveContext(SecurityContextHolder.getContext(), request, response);
rememberMeServices.loginSuccess(request, response, auth);
return "{\"status\": true}";
} catch (BadCredentialsException ex) {
return "{\"status\": false, \"error\": \"Bad Credentials\"}";
}
}
}
此示例具有用於自動裝配的bean的xml配置,但是我的項目要求通過類配置來完成。 我解決了第一個自動裝配問題,將其添加到我的安全性類配置中:
@Bean
public AuthenticationManager AuthenticationManager() throws Exception {
return authenticationManager();
}
現在,我正在嘗試使用securityContextRepository進行操作,但是在論壇上找到的所有內容都是xml配置解決方案。 有誰知道如何將此類配置為Bean來解決此問題? 謝謝。
HttpSessionSecurityContextRepository
是SecurityContextRepository
的默認實現。 將此添加到配置中:
@Bean
public SecurityContextRepository securityContextRepository() {
return new HttpSessionSecurityContextRepository();
}
請注意,bean的名稱是securityContextRepository
而不是repository
,我認為這可以減少任何歧義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.