登录时用户帐户已锁定

时间:2019-03-21 23:06:30

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

我现在开始学习Spring Security,但遇到了麻烦。我编写了配置类,从数据库中获取数据等等,但是在我的网页中,登录后,我看到消息“用户帐户已锁定”和url中的错误参数。

Locked image

MessengerApplication.java

@SpringBootApplication
public class MessengerApplication {

    public static void main(String[] args) {
        SpringApplication.run(MessengerApplication.class, args);
    }

}

MainPageController.java

@RestController
public class MainPageController {

    @RequestMapping("/")
    public ModelAndView greeting() {
        Map<String, Object> model = new HashMap<>();

        model.put("data", "world");

        return new ModelAndView("main_page", model);
    }

}

SecurityConfig.java

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserServiceImpl userService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {
        auth.authenticationProvider(authenticationProvider());
    }

    @Bean
    public DaoAuthenticationProvider authenticationProvider() {
        DaoAuthenticationProvider authProvider
                = new DaoAuthenticationProvider();
        authProvider.setUserDetailsService(userService);
        authProvider.setPasswordEncoder(encoder());
        return authProvider;
    }

    @Bean
    public PasswordEncoder encoder() {
        return new BCryptPasswordEncoder();
    }
}

UserServiceImpl.java

@Service
public class UserServiceImpl implements UserDetailsService {

    @Autowired
    UserRepository userRepository;

    @Override
    public MyUserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
        User user = userRepository.findUserByName(s);
        if (user == null)
            throw new UsernameNotFoundException(s);
        return new MyUserDetails(user);
    }
}

UserRepositoryImpl.java

@Repository
public class UserRepositoryImpl implements UserRepository {

    @Autowired
    JdbcTemplate template;

    @Override
    public User findUserByName(String name) {

        return template.queryForObject("select * from users where name = ?", rowMapper, name);
    }

    private RowMapper<User> rowMapper = new RowMapper<User>() {
        @Override
        public User mapRow(ResultSet resultSet, int i) throws SQLException {
            User user = new User();
            user.setPassword(resultSet.getString("password"));
            user.setName(resultSet.getString("name"));
            user.setId(resultSet.getLong("id"));
            return user;
        }
    };
}

UserRepository.java

public interface UserRepository  {

    User findUserByName(String name);
}

User.java

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(nullable = false, unique = true)
    private String name;

    private String password;

// get(), set()
}

MyUserDetails.java

public class MyUserDetails implements UserDetails {

    private User user;

    public MyUserDetails(User user) {
        this.user = user;
    }
// ...
}

1 个答案:

答案 0 :(得分:1)

方法为isAccountNonLocked,重点是 non 。您需要从此方法返回true才能拥有“解锁”帐户。与涉及“过期”等的方法相同。在这种情况下,true表示允许,false表示拒绝。