进销存系统_全局异常统一处理&非法请求访问控制
Posted 上善若水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进销存系统_全局异常统一处理&非法请求访问控制相关的知识,希望对你有一定的参考价值。
一、全局异常统一处理
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 后会重定向到登录页。
以上是关于进销存系统_全局异常统一处理&非法请求访问控制的主要内容,如果未能解决你的问题,请参考以下文章
进销存系统_SpringSecurity权限框架&登录&用户密码加密&退出