目录
前言
登录功能是web开发中常见的功能,也是学后端必须要练得一个功能,本次的登录功能相对完善一些,知识拦截器部分写的比较少,这部分提供给大家思考和完善相应的功能。这个功能已达到毕设的水准,基本知识点都是按照毕设的常用的知识点去编写的。
一、UserMapper层代码分析
创建接口UserMapper并实现MP的基本步骤。
@Repository
public interface UserMapper extends BaseMapper<User> {
}
二、UserService层代码分析
1.UserService接口
创建登录所需的方法。
public interface UserService {
// 登录
User login(String username, String password);
}
2.UserServiceImpl实现类
将Controller层传过来的用户名和密码先进行对密码使用MD5进行加密(数据库表存储的密码是加密后的密文,以保证用户密码的安全性),然后在进行MP的条件查询访问数据库查询该用户名和密码的用户。
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User login(String username, String password) {
//加密
String passwordWithMd5 = MD5Util.md5(password);
//根据用户名和加密之后的密码从数据库查询用户
//select * from user where username = ? and password = ?
LambdaQueryWrapper<User> wrapper=new LambdaQueryWrapper<User>();
wrapper.eq(User::getUsername,username)
.eq(User::getPassword,passwordWithMd5);
//返回查询结果
return userMapper.selectOne(wrapper);
}
}
3.UserController层代码分析
对登录进行判断是否登录成功,给前端返回Map集合{“code”,”0″}为登录失败返回的内容。Map集合{“code”,”1″}为登录成功返回的内容。登录成功需要用JWT技术返回一个令牌(token)。
@RestController
public class UserController {
@Autowired
private UserService userService;
Map<String,String> map=new HashMap<>();
// 登录
@RequestMapping("/admin/user/login")
public Map<String,String> login(String username,String password){
User user=userService.login(username,password);
if(user==null){//登录失败
map.put("code","0");
}else {//登录成功
HashMap<String,Object> 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 {
// 创建token
public 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();
}
// 解析token
public static Map parseToken(String token) {
return Jwts.parser().setSigningKey("heima_movies")
.parseClaimsJws(token)
.getBody();
}
}
4.拦截器设置
访问拦截器时查看上面的token是否存在,存在则用户登录成功状态放行,否则禁止通行返回401状态码。
//访问拦截器
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
try {
String token = request.getHeader("token");//从请求头获取token
Map 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 {
@Autowired
private LoginInterceptor loginInterceptor;
//设置拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
//定义放行路径
ArrayList<String> 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); //放行指定路径
}
}
5.展示效果图
登录页,在不输入用户名和密码访问路径http://localhost:8080/index.html会跳转到登录页面,被拦截器拦截,
输入正确的用户名和密码后跳转到主页面。
f12查看token存在的位置和值(这也是有令牌才可正常进入主功能页面)
总结
基于SpringBoot+MP+VUE的登录功能的实现考虑的相对全面,可作为毕设的参考。但VUE方面的代码在这里没有展示。想要了解的可以自己学学Vue知识点,主要还是JWT技术的运用。还有后端的代码逻辑的分析。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/114646.html