进销存系统_全局异常统一处理&非法请求访问控制

Posted 上善若水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进销存系统_全局异常统一处理&非法请求访问控制相关的知识,希望对你有一定的参考价值。

代码地址:https://gitee.com/bitaotao/jxc-mgmt-par.git

一、全局异常统一处理

1.1、创建 全局异常处理器

GlobalExceptionHandler.java

package com.xbmu.admin;

import com.xbmu.admin.exceptions.ParamsException;
import com.xbmu.admin.model.RespBean;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 全局异常处理器。
 * 一般情况下,在service层会产生异常,然后抛给了controller层
 * @author bitaotao
 * @version 1.0
 */
@ControllerAdvice
public class GlobalExceptionHandler {
    /**
     * 自定义参数异常处理
     * @param e 自定义参数异常对象
     * @return
     */
    @ExceptionHandler(ParamsException.class)
    @ResponseBody
    public RespBean paramsExceptionHandler(ParamsException e){
        // e.getMsg() 自定义异常信息
        return RespBean.error(e.getMsg());
    }

    /**
     * 系统内异常处理
     * @param e 系统内异常对象
     * @return
     */
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public RespBean exceptionHandler(Exception e){
        // e.getMessage() 系统自带异常信息
        return RespBean.error(e.getMessage());
    }
}

UserController.java
控制层try catch代码块处理

package com.xbmu.admin.controller;


import com.xbmu.admin.model.RespBean;
import com.xbmu.admin.pojo.User;
import com.xbmu.admin.service.IUserService;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

/**
 * <p>
 * 用户表 前端控制器
 * </p>
 *
 * @author bitaotao
 * @since 2021-09-11
 */
@Controller
@RequestMapping("/user")
public class UserController {
    @Resource
    private IUserService userService;

    @RequestMapping("login")
    @ResponseBody
    public RespBean login(String userName, String passWord, HttpSession session){
        User user = userService.login(userName, passWord);
        session.setAttribute("user",user);
        return RespBean.success("用户登录成功",user);
    }

    /**
     * 用户信息设置页面
     * @return
     */
    @RequestMapping("setting")
    public String setting(HttpSession session){
        // 用户信息设置成功后,从新获取最新的用户信息放到session中。
        User user = (User) session.getAttribute("user");
        session.setAttribute("user",userService.getById(user.getId()));
        return "user/setting";
    }

    /**
     * 用户信息更新
     * @param user
     * @return
     */
    @RequestMapping("updateUserInfo")
    @ResponseBody
    public RespBean updateUserInfo(User user){
        userService.updateUserInfo(user);
        return RespBean.success("用户信息更新成功");
    }

    /**
     * 用户密码更新页
     * @return
     */
    @RequestMapping("toPasswordPage")
    public String password(){
        return "user/password";
    }

    /**
     * 用户密码更新
     * @param session session对象
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @param confirmPassword 确认密码
     * @return
     */
    @RequestMapping("updateUserPassword")
    @ResponseBody
    public RespBean updateUserPassword(HttpSession session,String oldPassword,String newPassword,String confirmPassword){
        User user = (User) session.getAttribute("user");
        userService.updateUserPassword(user.getUserName(),oldPassword,newPassword,confirmPassword);
        return RespBean.success("用户密码更新成功!");
    }

}

1.2、测试

二、非法请求访问控制

2.1、编写拦截器

com/xbmu/admin/interceptors/NoLoginInterceptor.java

package com.xbmu.admin.interceptors;

import com.xbmu.admin.pojo.User;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 未登录情况下,需执行的拦截器
 * @author bitaotao
 * @since 2021-09-12
 */
public class NoLoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        User user = (User) request.getSession().getAttribute("user");
        if(null == user){
            // 重定向到首页
            response.sendRedirect("index");
            return false;
        }
        return true;
    }
}

com/xbmu/admin/config/MvcConfig.java

package com.xbmu.admin.config;

import com.xbmu.admin.interceptors.NoLoginInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 * mvc配置类
 * @author bitaotao
 * @since 2021-09-12
 */
@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Bean
    public NoLoginInterceptor noLoginInterceptor(){
        return new NoLoginInterceptor();
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(noLoginInterceptor())
                .addPathPatterns("/**") // 拦截所有资源
                .excludePathPatterns("/index","/user/login", // 放开首页、登录请求
                        "/css/**","/error/**","/images/**","/js/**","/lib/**");// 放开静态资源
    }
}

2.2、测试

在未登录的情况下,访问:http://localhost:8989/main 后会重定向到登录页。

以上是关于进销存系统_全局异常统一处理&非法请求访问控制的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot全局异常统一处理

SpringBoot全局异常统一处理

统一异常处理

进销存系统_SpringSecurity权限框架&登录&用户密码加密&退出

进销存系统_SpringSecurity权限框架&登录&用户密码加密&退出

springboot统一异常处理