【问题标题】:Spring security UserDetails and controller (get user)Spring security UserDetails 和控制器(获取用户)
【发布时间】:2021-06-09 11:53:35
【问题描述】:

UserDetailLoginController

UserDetail 从数据库中获取用户。

用户详情

    public class UserDetail implements UserDetailsService {

        private final
        UserServiceJpa userServiceJpa;

        public UserDetail(UserServiceJpa userServiceJpa) {
            this.userServiceJpa = userServiceJpa;
        }


        @Override
        public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {


            // Get user
            User user = userServiceJpa.findUserByEmail(email);


            if (user == null){
                throw new UsernameNotFoundException("There is no such user " + email);
            }


            return new org.springframework.security.core.userdetails.User(user.getEmail(),
                    user.getPassword(),
                    user.getEnabled(),
                    user.getAccount_non_expired(),
                    user.getCredentials_non_expired(),
                    user.getAccount_non_locked(),
                    getAuthorities());

        }


        private Collection<? extends GrantedAuthority> getAuthorities(){

            List<SimpleGrantedAuthority> authList = new ArrayList<>();
            authList.add(new SimpleGrantedAuthority("ROLE_USER"));
            authList.add(new SimpleGrantedAuthority("ROLE_ADMIN"));

            return authList;

        }

    }

登录控制器

    @Controller
    public class LoginController {


        @GetMapping(value = "/login")
        public String login () {

            return "/login";
        }

    }

问题!在LoginController中如何获取到UserDetail接收到的这个用户?

我这样做是为了不重新连接到数据库。因此,我想知道如果用户被阻止 - enabledaccountNonExpiredcredentialsNonExpiredaccountNonLocked,他是如何被阻止的>

【问题讨论】:

    标签: java spring spring-mvc spring-security spring-data


    【解决方案1】:

    你可以通过自动装配从你的 LoginController 创建一个 UserDetails 类,然后在你的登录类中调用该函数。

     @Controller
    public class LoginController {
    
        @Autowired
        private UserDetails userDetails;
    
        @GetMapping(value = "/login")
        public String login (@QueryParam("email")String email) {
            userDetails.loadUserByUsername(email);
            return "/login";
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2016-04-27
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 2016-01-22
      • 1970-01-01
      • 2014-02-19
      • 2015-04-30
      相关资源
      最近更新 更多