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); } }