@Controller
public class ApplicationController {
@GetMapping("/index")
public String goHome() {
return "index";
}
@GetMapping("/login")
public String login(Model model) {
return "login";
}
@GetMapping("/logout")
public String logout() {
return "login";
}
}
这是我的控制器课程
@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
User findByUsername(String username);
}
存储库类
public class UserPrincipal implements UserDetails {
/**
*
*/
private static final long serialVersionUID = 1L;
private User user;
public UserPrincipal(User user) {
this.user = user;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return Collections.singleton(new SimpleGrantedAuthority("USER"));
}
@Override
public String getPassword() {
return user.getPassword();
}
@Override
public String getUsername() {
return user.getUsername();
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
userprinciple类实现用户详细信息服务
@EnableWebSecurity
@Configuration
public class ApplicationSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
UserDetailsService userDetailService;
@Override
protected void configure(HttpSecurity http) throws Exception {
// TODO Auto-generated method stub
http.csrf().disable().authorizeRequests()
.antMatchers("/login", "/resources/**", "/css/**", "/fonts/**", "/img/**").permitAll().anyRequest()
.authenticated().and().formLogin().loginPage("/login").permitAll().and().logout()
.invalidateHttpSession(true).clearAuthentication(true)
.logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login").permitAll();
}
@Bean
public AuthenticationProvider authenticationProvider() {
DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
authenticationProvider.setUserDetailsService(userDetailService);
authenticationProvider.setPasswordEncoder(NoOpPasswordEncoder.getInstance());
return authenticationProvider;
}
}
配置类
<html lang="en">
<head>
<link rel="shortcut icon" href="img/favicon.png">
</head>
<body class="login-img3-body">
<div class="container">
<form class="login-form" th:action="@{/login}" method-"post">
<div class="login-wrap">
<p class="login-img"><i class="icon_lock_alt"></i></p>
<div class="input-group">
<span class="input-group-addon"><i class="icon_profile"></i></span>
<input type="text" class="form-control" placeholder="Username" autofocus name="username">
</div>
<div class="input-group">
<span class="input-group-addon"><i class="icon_key_alt"></i></span>
<input type="password" class="form-control" placeholder="Password" name="password">
</div>
<label class="checkbox">
<input type="checkbox" value="remember-me"> Remember me
<span class="pull-right"> <a href="#"> Forgot Password?</a></span>
</label>
<button class="btn btn-primary btn-lg btn-block" type="submit">Login</button>
<button class="btn btn-info btn-lg btn-block" type="submit">Signup</button>
</div>
</form>
<div class="text-right">
<div class="credits">
<!--
All the links in the footer should remain intact.
You can delete the links only if you purchased the pro version.
Licensing information: https://bootstrapmade.com/license/
Purchase the pro version form: https://bootstrapmade.com/buy/?theme=NiceAdmin
-->
Designed by <a href="https://bootstrapmade.com/">BootstrapMade</a>
</div>
</div>
</div>
</body>
</html>
这是我的html页面
@Service
public class MyUserDetailsService implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("User not found!");
}
return new UserPrincipal(user);
}
}
此服务类,用于检查用户名。
我想在输入凭据后使用用户名和密码bur登录,它重定向到同一登录页面但不登录到主页,并且还显示url中的用户名密码。我已删除软件包名称和导入内容。 / p>