簡體   English   中英

如何通過類實現自動連接SecurityContextRepository

[英]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來解決此問題? 謝謝。

HttpSessionSecurityContextRepositorySecurityContextRepository的默認實現。 將此添加到配置中:

@Bean
public SecurityContextRepository securityContextRepository() {
    return new HttpSessionSecurityContextRepository();
}

請注意,bean的名稱是securityContextRepository而不是repository ,我認為這可以減少任何歧義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM