当前位置: 代码迷 >> J2EE >> spring security如何实现区分登录用户的身份
  详细解决方案

spring security如何实现区分登录用户的身份

热度:21   发布时间:2016-04-17 23:00:42.0
spring security怎么实现区分登录用户的身份
我自定义的登录页面上输入了username、password
并且自定义了UserDetailsService,但是UserDetailsService中仅仅提供了 loadUserByUsername(String username)这一个方法,我现在需要区别不同的用户,提供两个登录页面或者在一个登录页面上使用radio选择用户类型,如管理员和普通用户,然后从不同的表中获得权限和密码,如我在页面使用一个radio来让用户选择使用什么身份登录,但是使用了radio后,在自定义的UserDetailsService中根本获取不了这个值,另一种方法是提供两个登录页面,这个我也不知道怎么实现,所以求问怎么实现这个功能?
其实可以使用一个页面,然后将管理员、普通用户的信息保存在一个表中,但是拿到手的数据库却是分开的。。。
------解决思路----------------------
把所有用户放在一张表中就好

我给你个例子,希望对你有帮助


@RequestMapping("/index")
public String index(HttpServletRequest request,HttpSession session) {
SecurityContext secCtx=SecurityContextHolder.getContext();
//获取权限
Authentication auth=secCtx.getAuthentication();
//获取用户名
Object principal=auth.getPrincipal();
String userName="";
if(principal instanceof UserDetails){
userName=((UserDetails) principal).getUsername();
}else{
userName=principal.toString();
}

UserDto user=userService.getUserByAccount(userName);
session.setAttribute("user", user);

//记录用户登录信息
if(user!=null) {
SysLog sysLog = new SysLog();
sysLog.setOperType(3001);
sysLog.setUserId(user.getId());
sysLog.setCreateTime(new Date());
sysLogService.addSysLog(sysLog);
}

if(user!=null&&user.getIsBlocked()==2001){
return "blockedLogin";
}

return "index";
}

------解决思路----------------------
获取不到值的原因是后端没获取前端的radio的值吧, service一般是通过参数获取springmvc的请求的参数的值。所以需要在service增加参数,调用方法前赋值。
  相关解决方案