您好我可以使用下面的代码获取我的bean的用户详细信息。但我无法在我的页面上获取用户名。
@Controller
@SessionScoped
public class HomeController extends SimpleUrlAuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication auth) throws IOException, ServletException {
UserDetails user = (UserDetails)auth.getPrincipal();
System.out.println("user::::"+user.getUsername());
request.getSession().setAttribute("user",user.getUsername());
setDefaultTargetUrl("/Home");
super.onAuthenticationSuccess(request, response, auth);}}
我能够重定向,现在在另一个控制器中我尝试通过
获取此userNameFacesContext facesCntxt = FacesContext.getCurrentInstance();
Map sessionMap = facesCntxt.getExternalContext().getSessionMap();
String userName = (String)sessionMap.get("user");
直到现在它工作正常..但是当我尝试在我的facelet中使用#{param ['user']}来获取此详细信息时,它不会返回任何值。
我犯的错是什么?
答案 0 :(得分:0)
您的代码有点令人困惑,您的AuthenticationSuccessHandler
是@Controller
并使用JSF(或CDI)@SessionScoped
?这是什么?
@Controller
是Spring MVC中使用的特定构造型@Component
注释,AuthenticationSuccessHandler
是Spring Security接口而不是Spring MVC Controller。所以我期望一个@Component
(或者只是用你的Spring Security配置在XML中注册它)。
@SessionScoped
在Spring上下文中没有做任何事情(除非你已经编写了扩展名)。所以你应该删除它。
如果您已正确配置Spring Security,只需使用HttpServletRequest
方法获取Principal
即可从getUserPrincipal
获取用户名。有关如何执行此操作,请参阅How to print principal using JSF 2.0 + Facelets?。 (所以不需要自己破解,只需使用标准)。