Commit ad229263 authored by 杨伊博's avatar 杨伊博

modify BCryptPasswordEncoder

parent 1de6a7c2
package com.us.example.config; package com.us.example.config;
import com.us.example.security.CustomUserService; import com.us.example.security.CustomUserService;
import com.us.example.util.MD5Util;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
...@@ -11,11 +9,7 @@ import org.springframework.security.config.annotation.method.configuration.Enabl ...@@ -11,11 +9,7 @@ import org.springframework.security.config.annotation.method.configuration.Enabl
import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.annotation.web.servlet.configuration.EnableWebMvcSecurity;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
/** /**
* Created by yangyibo on 17/1/18. * Created by yangyibo on 17/1/18.
...@@ -31,17 +25,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { ...@@ -31,17 +25,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired @Autowired
protected void configure(AuthenticationManagerBuilder auth) throws Exception { protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(customUserService).passwordEncoder(new PasswordEncoder(){ auth.userDetailsService(customUserService).passwordEncoder(new BCryptPasswordEncoder());
@Override
public String encode(CharSequence rawPassword) {
return MD5Util.encode((String)rawPassword);
}
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
return encodedPassword.equals(MD5Util.encode((String)rawPassword));
}}); //user Details Service验证
} }
@Override @Override
......
package com.us.example.controller; package com.us.example.controller;
import com.us.example.dao.UserDao;
import com.us.example.domain.SysUser;
import com.us.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.annotation.Secured; import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
...@@ -12,6 +17,8 @@ import org.springframework.web.bind.annotation.ResponseBody; ...@@ -12,6 +17,8 @@ import org.springframework.web.bind.annotation.ResponseBody;
@Controller @Controller
@RequestMapping("/users") @RequestMapping("/users")
public class HomeController { public class HomeController {
@Autowired
UserService userService;
@RequestMapping(method = RequestMethod.GET) @RequestMapping(method = RequestMethod.GET)
@ResponseBody @ResponseBody
...@@ -22,8 +29,8 @@ public class HomeController { ...@@ -22,8 +29,8 @@ public class HomeController {
@Secured({"ROLE_ADMIN","ROLE_USER"}) @Secured({"ROLE_ADMIN","ROLE_USER"})
@RequestMapping(method = RequestMethod.POST) @RequestMapping(method = RequestMethod.POST)
@ResponseBody @ResponseBody
public String save() { public Object save(@RequestBody SysUser user) {
return "saveUser"; return userService.create(user);
} }
......
...@@ -4,5 +4,7 @@ import com.us.example.domain.SysUser; ...@@ -4,5 +4,7 @@ import com.us.example.domain.SysUser;
public interface UserDao { public interface UserDao {
public SysUser findByUserName(String username); SysUser findByUserName(String username);
int create (SysUser sysUser);
} }
...@@ -16,6 +16,8 @@ public class SysUser implements UserDetails { // implements UserDetails 用于 ...@@ -16,6 +16,8 @@ public class SysUser implements UserDetails { // implements UserDetails 用于
private String username; private String username;
@JsonIgnore @JsonIgnore
private String password; private String password;
private String rawPassword;
@JsonIgnore
private List<SysRole> roles; private List<SysRole> roles;
private List<? extends GrantedAuthority> authorities; private List<? extends GrantedAuthority> authorities;
...@@ -52,16 +54,27 @@ public class SysUser implements UserDetails { // implements UserDetails 用于 ...@@ -52,16 +54,27 @@ public class SysUser implements UserDetails { // implements UserDetails 用于
this.roles = roles; this.roles = roles;
} }
public String getRawPassword() {
return rawPassword;
}
public void setRawPassword(String rawPassword) {
this.rawPassword = rawPassword;
}
@JsonIgnore @JsonIgnore
@Override @Override
public boolean isAccountNonExpired() { public boolean isAccountNonExpired() {
return true; return true;
} }
@JsonIgnore @JsonIgnore
@Override @Override
public boolean isAccountNonLocked() { public boolean isAccountNonLocked() {
return true; return true;
} }
@JsonIgnore @JsonIgnore
@Override @Override
public boolean isCredentialsNonExpired() { public boolean isCredentialsNonExpired() {
...@@ -74,11 +87,13 @@ public class SysUser implements UserDetails { // implements UserDetails 用于 ...@@ -74,11 +87,13 @@ public class SysUser implements UserDetails { // implements UserDetails 用于
public boolean isEnabled() { public boolean isEnabled() {
return true; return true;
} }
@JsonIgnore @JsonIgnore
@Override @Override
public Collection<? extends GrantedAuthority> getAuthorities() { public Collection<? extends GrantedAuthority> getAuthorities() {
return authorities; return authorities;
} }
public void setGrantedAuthorities(List<? extends GrantedAuthority> authorities) { public void setGrantedAuthorities(List<? extends GrantedAuthority> authorities) {
this.authorities = authorities; this.authorities = authorities;
} }
......
package com.us.example.service;
import com.us.example.dao.UserDao;
import com.us.example.domain.SysUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
/**
* Created by yangyibo on 17/3/2.
*/
@Service
public class UserService {
@Autowired
UserDao userDao;
public SysUser create(SysUser sysUser){
//进行加密
BCryptPasswordEncoder encoder =new BCryptPasswordEncoder();
sysUser.setPassword(encoder.encode(sysUser.getRawPassword().trim()));
userDao.create(sysUser);
return sysUser;
}
}
package com.us.example.util;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
/**
* Created by yangyibo on 17/3/2.
*/
public class BCryptPasswordEncoderTest {
public static void main(String[] args) {
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
System.out.println(encoder.encode("abel"));
System.out.println(encoder.encode("admin"));
}
}
package com.us.example.util;
/**
* Created by yangyibo on 17/2/7.
*/
import java.security.MessageDigest;
/**
* MD5加密工具
*
*/
public class MD5Util {
private static final String SALT = "exampel";
public static String encode(String password) {
password = password + SALT;
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
throw new RuntimeException(e);
}
char[] charArray = password.toCharArray();
byte[] byteArray = new byte[charArray.length];
for (int i = 0; i < charArray.length; i++)
byteArray[i] = (byte) charArray[i];
byte[] md5Bytes = md5.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16) {
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
}
public static void main(String[] args) {
System.out.println(MD5Util.encode("abel"));
System.out.println(MD5Util.encode("admin"));
}
}
\ No newline at end of file
...@@ -18,4 +18,14 @@ ...@@ -18,4 +18,14 @@
LEFT JOIN Sys_Role r on sru.Sys_Role_id=r.id LEFT JOIN Sys_Role r on sru.Sys_Role_id=r.id
where username= #{username} where username= #{username}
</select> </select>
<insert id="create" parameterType="com.us.example.domain.SysUser">
<selectKey resultType="int" order="AFTER" keyProperty="id" >
SELECT LAST_INSERT_ID()
</selectKey>
INSERT into Sys_User
(username,password)
values
(#{username},#{password})
</insert>
</mapper> </mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment