洛阳霞光只做有效果的网站,欧派全屋定制,网站建设公司怎样,帮人做网站要怎么赚钱吗目录
一、项目简介
二、设置静态资源访问路径
三、实现登录功能
四、拦截访问请求 本篇文章以黑马瑞吉外卖为例
一、项目简介
瑞吉外卖项目分为后台和前台系统#xff0c;后台提供给管理人员使用#xff0c;前台则是用户订餐使用
资源我们放在resources下 二、设置静态…目录
一、项目简介
二、设置静态资源访问路径
三、实现登录功能
四、拦截访问请求 本篇文章以黑马瑞吉外卖为例
一、项目简介
瑞吉外卖项目分为后台和前台系统后台提供给管理人员使用前台则是用户订餐使用
资源我们放在resources下 二、设置静态资源访问路径
我们的资源放在resources下当我们访问localhost:8080/backend/page/login/login.html后台登录时发现无法访问因为springboot只要静态资源放在类路径下 called /static (or /public or /resources or /META-INF/resources
才能访问所以我们需要自定义一下资源的访问路径
我们可以通过重写 WebMvcConfigurationSupport 的 addResourceHandlers 设置静态资源访问路径 代码如下
Configuration
Slf4j
public class WebMvcConfig extends WebMvcConfigurationSupport {/** 设置静态资源映射*/Overrideprotected void addResourceHandlers(ResourceHandlerRegistry registry) {log.info(开始进行静态资源映射...);registry.addResourceHandler(/backend/**).addResourceLocations(classpath:/backend/);registry.addResourceHandler(/front/**).addResourceLocations(classpath:/front/);}
} 于是就能访问了 三、实现登录功能
通过网页检查-console 可以知道登录页面会向 employee/login 发送请求所以我们写一个controller实现对应的方法处理请求。对于登录请求的思路大致如下
因为数据库的密码使用md5加密所以需要先对密码进行md5加密将提交的用户名查询数据库是否有对应的用户无则提示登陆失败将查出的用户密码进行比对不同则则提示登陆失败将用户id放入session域中供后面使用
RestController
Slf4j
RequestMapping(/employee)
public class EmployeeController {Autowiredprivate EmployeeService employeeService;PostMapping(/login)public REmployee login(HttpServletRequest request, RequestBody Employee employee) {//1.将页面提交的密码password进行md5加密String password employee.getPassword();password DigestUtils.md5DigestAsHex(password.getBytes());//2.根据页面提交的用户名查询数据库LambdaQueryWrapperEmployee wrapper new LambdaQueryWrapper();wrapper.eq(Employee::getUsername, employee.getUsername());Employee user employeeService.getOne(wrapper);//3.找不到用户或者密码比对失败或者账户被禁用返回错误消息if(user null || !user.getPassword().equals(password)) {return R.error(登录失败);}if(user.getStatus() 0) {return R.error(账户已禁用);}//4.登陆成功将用户Id放入session域request.getSession().setAttribute(employee, user.getId());return R.success(user);}
} 登录成功 这里我们还要实现一下登出功能在右上角点击可以登录我们只需要写一个对应的方法即可需要清楚session域中的用户id返回退出成功的信息。 /** 员工退出*/PostMapping(/logout)public RString logout(HttpServletRequest request) {// 清除session中的用户Idrequest.getSession().removeAttribute(employee);return R.success(退出成功);}
四、拦截访问请求
登出后我们发现直接请求员工列表也是可行的这当然是不合理的如果没有登陆的请求应该返回登录页面我们可以通过一个全局过滤器实现请求的拦截步骤如下
对于不需要拦截的请求放行需要的我们查看session域中是否有用户id存在不存在则跳转回登陆页面
由于前端响应拦截器使用的是json形式所以我们需要返回 json 形式的对应字符串 WebFilter(filterName loginCheckFilter, urlPatterns /*)
Slf4j
public class LoginCheckFilter implements Filter {// 路径匹配器支持通配符public static final AntPathMatcher PATH_MATCHER new AntPathMatcher();Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request (HttpServletRequest) servletRequest;HttpServletResponse response (HttpServletResponse)servletResponse;// 1.获取请求的URIString requestURI request.getRequestURI();String[] urls new String[]{/employee/login,/employee/logout,/backend/**,/front/**};// 2.判断访问的URI需不需要登录才可访问log.info(拦截到请求{}, requestURI);if(check(urls, requestURI)) {log.info(本次请求{}不需要处理, requestURI);filterChain.doFilter(request, response);return;}// 3.已经登录无需处理直接放行if(request.getSession().getAttribute(employee) ! null) {log.info(用户已登录id为{} request.getSession().getAttribute(employee));filterChain.doFilter(request, response);return;}// 4. 如果未登录返回未登录结果通过输出流的方式向客户端返回响应数据log.info(用户未登录);response.getWriter().write(JSON.toJSONString(R.error(NOTLOGIN)));return;}/** 路径匹配判断是否需要放行*/public boolean check(String[] urls, String url) {for(String item : urls) {if(PATH_MATCHER.match(item, url)) {return true;}}return false;}
}