psql -U root test
CREATE TABLE employee (
id SERIAL NOT NULL,
name varchar(255),
password varchar(255),
PRIMARY KEY(id)
);
EmployeeMapper.java
@Select({
"select * from employee where name = #{name} limit 1"
})
Employee selectByName(String name);
SecurityConfig.java
package com.example.demo.security;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/webjars/**", "/css/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginProcessingUrl("/login")
.loginPage("/login")
.failureUrl("/login?error")
.defaultSuccessUrl("/menu", true)
.usernameParameter("name")
.passwordParameter("password")
.and()
.logout()
.logoutSuccessUrl("/login");
}
@Bean
PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
LoginUserDetails.java
package com.example.demo.security;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import com.example.demo.domain.Employee;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper=false)
public class LoginUserDetails extends User {
private final Employee employee;
public LoginUserDetails(Employee employee, String role) {
super(employee.getName(), employee.getPassword(), AuthorityUtils.createAuthorityList(role));
this.employee = employee;
}
}
LoginUserDetailsService.java
package com.example.demo.security;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import com.example.demo.Employee;
import com.example.demo.mybatis.mapper.EmployeeMapper;
@Service
public class LoginUserDetailsService implement UserDetailsService {
@Autowired
EmployeeExample employeeExample;
@Autowired
EmployeeMapper employeeMapper;
@Override
public UserDetails loadUserByUsername(String name) throws UsernameNotFoundException {
Employee employee = employeeMapper.selectByName(name);
if (employee == null) {
throw new UsernameNotFoundException("Wrong email or password");
}
String role = "ROLE_ADMIN";
return new LoginUserDetails(employee, role);
}
}