spring security 登录页自己处理

项目中的ss中登录一般是有ss实现 我们只要UserDetailsService接口重写其中的方法loadUserByUsername方法就行了.
  但是现在问题出现了 如果我在登录的时候想根据当前的登录人的不同角色来实现不同的跳转 还有就是往session放入其他的信息呢..这个时候的登录最好是有我们自己处理.
  我们在action中只需要把登录验证后的Authentication信息写入SecurityContext中研究了下ss源码终于找得到解决方案
//获得所有的角色信息
GrantedAuthority[] grantedAuths = obtainGrantedAuthorities(admin);
boolean accountNonExpired = true;
boolean credentialsNonExpired = true;
boolean accountNonLocked = true;
org.springframework.security.userdetails.User userdetail = new org.springframework.security.userdetails.User(
userName, admin.getPassword(),true,
accountNonExpired, credentialsNonExpired, accountNonLocked,
grantedAuths);   
        HttpServletRequest request = ServletActionContext.getRequest();   
//设置登录请求信息 如果sessionid, ip
        WebAuthenticationDetails webdetails=new WebAuthenticationDetails(request);
//创建Ahthentication对象
        UsernamePasswordAuthenticationToken result = new UsernamePasswordAuthenticationToken(admin.getUserName(),
                admin.getPassword(),userdetail.getAuthorities());
  //设置登录的请求详细信息
        result.setDetails(webdetails);
        SecurityContext sc=SecurityContextHolder.getContext();
        sc.setAuthentication(result);
//保存SecutityContext信息
session.put("SPRING_SECURITY_CONTEXT",sc);

你可能感兴趣的:(spring,Security)