首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpringMVC UserDetailsService登录

SpringMVC UserDetailsService登录
EN

Stack Overflow用户
提问于 2016-10-08 04:02:34
回答 1查看 53关注 0票数 0

我有这样一门课:

代码语言:javascript
复制
@Service
public class AppUserDetailsService implements UserDetailsService {

@Autowired
private UserRepository userRepository;

@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
    Optional<User> optionalUser = userRepository.findByEmailAndStatus(email, UserStatusEnum.ACTIVE);
    User user = optionalUser.orElseThrow(() -> new UsernameNotFoundException("Usuário e/ou senha incorretos"));
    return new UserSystem(user, getPermissoes(user));
}

private Collection<? extends GrantedAuthority> getPermissoes(User user) {
    Set<SimpleGrantedAuthority> authorities = new HashSet<>();

    user.getPermitionList().forEach(p -> authorities.add(new SimpleGrantedAuthority(p.getCode().getDescription().toUpperCase())));

    return authorities;
  }
}

我的html表单:

代码语言:javascript
复制
<form name="login" method="POST" th:action="@{/login}">
          <div class="form-group">
            <input type="email" class="form-control input-lg" id="email" placeholder="Email" name="email" 
                required="required"/>
          </div>
          <div class="form-group">
            <input type="password" class="form-control input-lg" id="password" placeholder="Senha" name="password" 
                required="required"/>
          </div>
          <div class="btn-group btn-group-justified" role="group">
            <div class="btn-group" role="group">
              <button type="button" class="btn btn-danger" onclick="showUserForm()">Cadastar</button>
            </div>
            <div class="btn-group" role="group">
              <button type="submit" class="btn btn-default">Entrar</button>
            </div>
          </div>
          <button type="button" class="btn btn-link wimoo-link">Esqueceu sua senha?</button>
    </form>

我的登录Bean:

代码语言:javascript
复制
    @GetMapping("/login")
public ModelAndView login(@AuthenticationPrincipal User user) {
    ModelAndView mv = new ModelAndView("login");
    mv.addObject(new User());

    if (user != null) {
        mv = new ModelAndView("masterdata/home");
        return mv;
    } 

    return mv; 
}

问题是,我的方法'public ModelAndView login(@AuthenticationPrincipal User user)‘中的用户总是空的。方法loadUserByUsername是可以的,但是在我的bean中,用户总是空的。

EN

回答 1

Stack Overflow用户

发布于 2016-10-08 10:48:12

你遗漏了一些东西。您没有在登录方法中将表单详细信息绑定到您的用户。要进行绑定,请执行以下操作:

在您的表单上,您有:

代码语言:javascript
复制
<div class="form-group">
    <input type="email" class="form-control input-lg" id="email" placeholder="Email" name="email" required="required"/>
</div>

如果要将表单中的此电子邮件绑定到用户对象上的电子邮件字段,则在User类上具有:

代码语言:javascript
复制
public class User{
    private String myEmailAddress;
}

然后,在输入标记上,您应该添加一个等于myEmailAddress的名称属性,以便将表单中的值绑定到登录方法上的用户对象。

代码语言:javascript
复制
<div class="form-group">
    <input type="email" name="myEmailAddress" class="form-control input-lg" id="email" placeholder="Email" required="required"/>
</div>

您现在需要做的就是将@ModelAttribute注释添加到登录方法中,以便实际执行此绑定。如下所示:

代码语言:javascript
复制
@GetMapping("/login")
public ModelAndView login(@AuthenticationPrincipal @ModelAttribute User user) {
    ModelAndView mv = new ModelAndView("login");
    mv.addObject(new User());

    if (user != null) {
        mv = new ModelAndView("masterdata/home");
        return mv;
    } 

    return mv; 
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39924946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档