博客登录功能
效果图
web文件夹下创建LoginController
@Controller
@RequestMapping("/admin")
public class LoginController {
@Autowired
private IUserService userService;//注入类
@GetMapping
public String toLogin(){
return "admin/login";
}
@PostMapping("/login")//登录,将user信息存入session中
public String login(String username, String password, HttpSession session, RedirectAttributes redirectAttributes){
User user = userService.checkUser(username, password);
if(user!=null){
session.setAttribute("user",user);
return "admin/index";
}else {
redirectAttributes.addFlashAttribute("message","用户名和密码错误");
return "redirect:/admin";
}
}
@GetMapping("/logout")//注销
public String logout(HttpSession session){
session.removeAttribute("user");
return "admin/login";
}
}
service下创建impl文件夹用于存放实现类
IUserService接口
public interface IUserService {
User checkUser(String username, String password);//登录验证用户
}
UserServiceImpl
注入UserDa,这里checkUser中使用了密码加密的方法
MD5Util.code(password)
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private UserDao userDao;
@Override
public User checkUser(String username, String password) {
return userDao.findByUsernameAndPassword(username, MD5Util.code(password));
}
}
Util下 MD5Util
public class MD5Util {
/**
* MD5加密类
* @param str 要加密的字符串
* @return 加密后的字符串
*/
public static String code(String str){
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(str.getBytes());
byte[]byteDigest = md.digest();
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < byteDigest.length; offset++) {
i = byteDigest[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
//32位加密
return buf.toString();
// 16位的加密
//return buf.toString().substring(8, 24);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
System.out.println(code("1"));
}
}
UserDao
继承JpaRepository类,用于使用其中已完成的方法。
public interface UserDao extends JpaRepository<User,Long> {
User findByUsernameAndPassword(String username, String password);
}