编码规范:常量尽量使用全部大写(快捷键:Ctrl+shift+y,全部大写)
修改密码,将密码修改为和用户名一样。
//设置加密的方法
public class MD5Utils {
//设置盐值
public static String SALT="itsource";
// 设置加密次数
public static int hashIterations=10;
// 定义一个方法来生成密码
public static String createMD5(String password){
SimpleHash hash = new SimpleHash("MD5",password,SALT,hashIterations);
return hash.toString();
}
}
测试
//将用户的密码修改为和用户的名字相同,并进行加密
@Test
public void testUpdatePwd() throws Exception{
List<Employee> list = employeeService.findAll();
list.forEach(employee -> {
// 通过查询到的所有的用户信息list来拿到用户名
String username = employee.getUsername();
//将用户的用户名来作为密码进行加密
employee.setPassword(MD5Utils.createMD5(username));
// 然后保存加密密码到数据库
employeeService.save(employee);
});
}
保存的时候将密码加密
修改不加密,因为修改不会修改密码。
我们也可以在service层修改保存时密码加密的代码:
我们覆写save方法:
// 根据名称查询用户
@Override
public Employee findByUsername(String username) {
return employeeRepository.findByUsername(username);
}
两个登录的login路径
两个login,第一个login跳转到登录页面,第二个login用于登录功能
可以通过请求方式来区分两个login,第一个login使用get请求
//有两个登录login路径
// 这个login路径我们将它跳转到登录页面,为它配置GET请求方式
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String index() {
return "/login";
}
/*使用AJAX请求,这个请求只返回数据,不跳转,因为AJAX请求如果跳转的话,
会出现两种情况,第一种是会将跳转页面当做字段传回来,第二种就是直接报错
* */
//这个我们用来实现登录功能,配置为POST请求
@RequestMapping(value = "/login", method = RequestMethod.POST)
@ResponseBody
// @RequestMapping("/login")
public JsonResult login(String username, String password) {
// public String login(String username, String password) {
System.out.println("=====名称:"+username+"====密码:"+password);
//拿到从前台传来的用户信息,subject代表当前用户
Subject subject = SecurityUtils.getSubject();
// 如果用户还没有登录,那么先通过令牌来使用户登录
if (!subject.isAuthenticated()) {
try {
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
subject.login(token);
} catch (UnknownAccountException e) {
e.printStackTrace();
//System.out.println("用户名出错了!");
return new JsonResult(false,"密码或者用户名错误!请核对后再试");
} catch (IncorrectCredentialsException e) {
e.printStackTrace();
return new JsonResult(false,"密码或者用户名错误!请核对后再试");
} catch (AuthenticationException e) {
e.printStackTrace();
return new JsonResult(false,"出现未知错误!请联系管理员!");
}
}
//成功后跳到 main.jsp
return new JsonResult();
}
配置拦截路径
测试两个login,登录页面样式消失,被拦截了,放行样式:
//使用集合,将需要放行的路径,需要权限的路径,需要登录访问的路径放进去
public LinkedHashMap<Object, Object> createFilterChainDefinitionMap(){
LinkedHashMap<Object, Object> filterChainDefinitionMap = new LinkedHashMap<>();
// 设置不需要访问也可以被放行的路径
filterChainDefinitionMap.put("/login", "anon");
filterChainDefinitionMap.put("/login.jsp", "anon&