springBoot 定义未登录拦截

登录验证
	@ApiOperation(value="用户登录验证",notes = "用户登录验证")
	@RequestMapping("loginUser")
	public String getUsers(String username,String password,HttpServletRequest request) {
		Enumeration<String> header = request.getHeaderNames();
//		while(header.hasMoreElements()) {
//			System.out.println(header.nextElement());
//		}
//    	这里验证登录,用户名、密码正确存session,不正确转发到登录页
		String flag = "";
		try {
			if(StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
				flag = "用户名或者密码为空";
				return "redirect:"+"login";
			}
			User user = userService.findByUsername(username, password);
			if(user != null){
				HttpSession session = request.getSession();
				session.setAttribute("user", user);
				return "index";
			}else{
				flag = "用户名或者密码错误";
				request.setAttribute("flag",flag);
				return "login";
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return flag;
	}

定义拦截器

/** 
 * 登录验证拦截 
 * 
 */  
@Controller  
@Component  
public class LoginInterceptor extends HandlerInterceptorAdapter {  
      
    Logger log = Logger.getLogger(LoginInterceptor.class);  
  
    @Override  
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)  
            throws Exception {  
        String basePath = request.getContextPath();  
        String path = request.getRequestURI();  
          
        if(!doLoginInterceptor(path, basePath) ){//是否进行登陆拦截  
            return true;  
        }  
          
          
        //如果登录了,会把用户信息存进session  
        HttpSession session = request.getSession();  
        User users =  (User) session.getAttribute("user");
        if(users==null){  
            String requestType = request.getHeader("X-Requested-With");  
            if(requestType!=null && requestType.equals("XMLHttpRequest")){  
                response.setHeader("sessionstatus","timeout");  
                response.getWriter().print("LoginTimeout");  
                response.sendRedirect(request.getContextPath() + "login");
                return false;  
            } else {  
                log.info("尚未登录,跳转到登录界面");  
            }
            return false;  
        }  
        return true;  
    }  
      
    /** 
     * 是否进行登陆过滤 
     * @param path 
     * @param basePath 
     * @return 
     */  
    private boolean doLoginInterceptor(String path,String basePath){  
        path = path.substring(basePath.length());  
        Set<String> notLoginPaths = new HashSet<>();  
        //设置不进行登录拦截的路径:登录注册和验证码  
        //notLoginPaths.add("/");  
        notLoginPaths.add("/loginUser");  
//        notLoginPaths.add("/");
        notLoginPaths.add("/login");  
//        notLoginPaths.add("/register");  
//        notLoginPaths.add("/kaptcha.jpg");  
//        notLoginPaths.add("/kaptcha");  
        //notLoginPaths.add("/sys/logout");  
        //notLoginPaths.add("/loginTimeout");  
          
        if(notLoginPaths.contains(path)) return false;  
        return true;  
    }  
}
自定义拦截规则

/**
 * @Description: WebMvcConfigurer 替代 WebMvcConfiguirerAdapter,对springMVC
 *                的自动配置和我们自己对springMVC的扩展都会有效,
 *                WebMvcConfigurationSupport 自动配置会失效
 * @Author: dongwei_qi
 * @Date: 2019/12/11
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    LoginInterceptor loginInterceptor;

    /**
     * 不需要登录拦截的url:登录注册和验证码
     */
    final String[] notLoginInterceptPaths = {"/login","loginUser","/pages/**","/**/*.css", "/**/*.js", "/**/*.png", "/**/*.jpg", "/**/*.jpeg", "/*.html", "/**/*.html","/swagger-resources/**"};//"/", "/login/**", "/person/**", "/register/**", "/validcode", "/captchaCheck", "/file/**", "/contract/htmltopdf", "/questions/**", "/payLog/**", "/error/**" };

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 日志拦截器
        //registry.addInterceptor(logInterceptor).addPathPatterns("/**");
        // 登录拦截器
        registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns(notLoginInterceptPaths);
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }


    /**
     * 设置默认登录页面
     */
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
//    	registry.addViewController("*/").setViewName("login");
//    	registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
//    	super.addViewControllers(registry);
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中使用MyBatis拦截器来拦截特定的Mapper方法,你可以通过实现`Interceptor`接口来创建自定义拦截器,并在拦截器中定义你想要的逻辑。以下是一个示例: 首先,创建一个实现了`Interceptor`接口的自定义拦截器类,例如`MyInterceptor`。在该类中,你可以重写`intercept`方法,在方法内部实现你的拦截逻辑。例如,下面的示例中通过判断Mapper类型来拦截特定的Mapper方法: ```java @Intercepts({ @Signature(type = UserMapper.class, method = "getUserById", args = {Long.class}) }) public class MyInterceptor implements Interceptor { @Override public Object intercept(Invocation invocation) throws Throwable { // 在这里实现你的拦截逻辑 System.out.println("Before getUserById method"); // 继续执行被拦截的方法 Object result = invocation.proceed(); // 在这里实现你的拦截逻辑 System.out.println("After getUserById method"); return result; } } ``` 然后,在你的Spring Boot配置类中将自定义拦截器添加到MyBatis的配置中。例如: ```java @Configuration public class MyBatisConfig { @Autowired private MyInterceptor myInterceptor; @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); // 添加自定义拦截器 Interceptor[] interceptors = new Interceptor[]{myInterceptor}; sessionFactory.setPlugins(interceptors); return sessionFactory.getObject(); } } ``` 在上述示例中,我们将自定义拦截器`MyInterceptor`添加到了MyBatis的配置中,并通过`setPlugins`方法设置了拦截器。这样,当调用`UserMapper`接口中的`getUserById`方法时,拦截器的拦截逻辑就会被触发。 需要注意的是,上述示例中只拦截了`UserMapper`接口中的`getUserById`方法,你可以根据自己的需求,通过修改`@Signature`注解中的参数来拦截其他的Mapper方法。另外,你也可以创建多个自定义拦截器,并将它们按照需要添加到MyBatis配置中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值