目录
前言
一、UserMapper层代码分析
二、UserService层代码分析
1.UserService接口
2.UserServiceImpl实现类
3.UserController层代码分析
4.拦截器设置
5.展示效果图
总结
登录功能是web开发中常见的功能,也是学后端必须要练得一个功能,本次的登录功能相对完善一些,知识拦截器部分写的比较少,这部分提供给大家思考和完善相应的功能。这个功能已达到毕设的水准,基本知识点都是按照毕设的常用的知识点去编写的。
创建接口UserMapper并实现MP的基本步骤。
@Repository
public interface UserMapper extends BaseMapper {
}
创建登录所需的方法。
public interface UserService {
// 登录User login(String username, String password);
}
将Controller层传过来的用户名和密码先进行对密码使用MD5进行加密(数据库表存储的密码是加密后的密文,以保证用户密码的安全性),然后在进行MP的条件查询访问数据库查询该用户名和密码的用户。
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic User login(String username, String password) {//加密String passwordWithMd5 = MD5Util.md5(password);//根据用户名和加密之后的密码从数据库查询用户//select * from user where username = ? and password = ?LambdaQueryWrapper wrapper=new LambdaQueryWrapper();wrapper.eq(User::getUsername,username).eq(User::getPassword,passwordWithMd5);//返回查询结果return userMapper.selectOne(wrapper);}
}
对登录进行判断是否登录成功,给前端返回Map集合{“code”,"0"}为登录失败返回的内容。Map集合{“code”,"1"}为登录成功返回的内容。登录成功需要用JWT技术返回一个令牌(token)。
@RestController
public class UserController {@Autowiredprivate UserService userService;Map map=new HashMap<>();
// 登录@RequestMapping("/admin/user/login")public Map login(String username,String password){User user=userService.login(username,password);if(user==null){//登录失败map.put("code","0");}else {//登录成功HashMap tokenMap = new HashMap();tokenMap.put("id", user.getId());String token = JwtUtil.createToken(tokenMap);map.put("token",token);map.put("code","1");}return map;}
}
JWT 技术创建token、解析token代码。
//JWT的生成和解析
public class JwtUtil {// 创建tokenpublic static String createToken(Map claims) {return Jwts.builder().setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24))//设置有效时间为1天.setClaims(claims) //设置响应数据体.signWith(SignatureAlgorithm.HS256, "heima_movies") //设置加密方法和加密盐.compact();}// 解析tokenpublic static Map parseToken(String token) {return Jwts.parser().setSigningKey("heima_movies").parseClaimsJws(token).getBody();}
}
访问拦截器时查看上面的token是否存在,存在则用户登录成功状态放行,否则禁止通行返回401状态码。
//访问拦截器
@Component
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {try {String token = request.getHeader("token");//从请求头获取tokenMap map = JwtUtil.parseToken(token);BeanUtil.mapToBean(map, Member.class, true);return true;//放行} catch (Exception e) {response.setStatus(401);return false;//禁止通行,返回401状态码}}
}
拦截器需拦截的内容和放行的路径设置。将管理员部分路径拦截不让普通用户访问。
@Configuration
public class ManagerConfig implements WebMvcConfigurer {@Autowiredprivate LoginInterceptor loginInterceptor;//设置拦截器@Overridepublic void addInterceptors(InterceptorRegistry registry) {//定义放行路径ArrayList urls = new ArrayList<>();urls.add("/**/*.js");//管理系统静态资源urls.add("/**/*.css");//管理系统静态资源urls.add("/**/*.jpg");//管理系统静态资源urls.add("/**/*.png");//管理系统静态资源urls.add("/**/*.html");//管理系统静态资源urls.add("/admin/user/login");//管理系统登录请求urls.add("/admin/user/logout");//管理系统退出请求//配置拦截器和路径registry.addInterceptor(loginInterceptor).addPathPatterns("/admin/**")//拦截所有.excludePathPatterns(urls); //放行指定路径}
}
登录页,在不输入用户名和密码访问路径http://localhost:8080/index.html会跳转到登录页面,被拦截器拦截,

输入正确的用户名和密码后跳转到主页面。

f12查看token存在的位置和值(这也是有令牌才可正常进入主功能页面)

基于SpringBoot+MP+VUE的登录功能的实现考虑的相对全面,可作为毕设的参考。但VUE方面的代码在这里没有展示。想要了解的可以自己学学Vue知识点,主要还是JWT技术的运用。还有后端的代码逻辑的分析。
上一篇:描述吓人的句子
下一篇:用灰色的鬓角对待我。下一句是