激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - springboot實現攔截器之驗證登錄示例

springboot實現攔截器之驗證登錄示例

2020-08-18 11:33天使沒吃飽 Java教程

本篇文章主要介紹了springboot實現攔截器之驗證登錄示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

整理文檔,搜刮出一個springboot實現攔截器驗證登錄示例,稍微整理精簡一下做下分享。

添加jar包,這個jar包不是必須的,只是在攔截器里用到了,如果不用的話,完全可以不引入

?
1
2
3
4
5
<dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.5</version>
    </dependency>

springboot默認為Tomcat,如果用jetty,還需要引入

?
1
2
3
4
5
<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>

1、以登錄驗證為例,首先創建個@Auth注解

?
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.demo.interceptor;
 
import java.lang.annotation.*;
 
/**
 * Created by huguoju on 2016/12/30.
 * 在類或方法上添加@Auth就驗證登錄
 */
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Auth {
}

2、創建一個Constants,在攔截器里用

?
1
2
3
4
5
6
7
8
9
10
11
package com.demo.util;
 
/**
 * Created by huguoju on 2016/12/30.
 */
public interface Constants {
  int MAX_FILE_UPLOAD_SIZE = 5242880;
  String MOBILE_NUMBER_SESSION_KEY = "sessionMobileNumber";
  String USER_CODE_SESSION_KEY = "userCode";
  String SESSION_KEY = "sessionId";
}

3、創建一個SessionData,用于保存在session中的字段

?
1
2
3
4
5
6
7
8
9
10
11
12
package com.demo.model;
 
import lombok.Data;
 
/**
 * Created by huguoju on 2016/12/30.
 */
@Data
public class SessionData {
  private Integer userCode;
  private String mobileNumber;
}

4、實現登錄攔截實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.demo.interceptor;
 
import com.demo.model.SessionData;
import com.demo.util.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
 
import static com.demo.util.Constants.MOBILE_NUMBER_SESSION_KEY;
import static com.demo.util.Constants.SESSION_KEY;
import static com.demo.util.Constants.USER_CODE_SESSION_KEY;
 
/**
 * Created by huguoju on 2016/12/30.
 */
@Component
public class LoginInterceptor extends HandlerInterceptorAdapter {
  @Autowired
  private RedisUtil redisUtils;
  private final static String SESSION_KEY_PREFIX = "session:";
  public boolean preHandle(HttpServletRequest request,
               HttpServletResponse response, Object handler) throws Exception {
    if (!handler.getClass().isAssignableFrom(HandlerMethod.class)) {
      return true;
    }
    handlerSession(request);
 
    final HandlerMethod handlerMethod = (HandlerMethod) handler;
    final Method method = handlerMethod.getMethod();
    final Class<?> clazz = method.getDeclaringClass();
    if (clazz.isAnnotationPresent(Auth.class) ||
        method.isAnnotationPresent(Auth.class)) {
      if(request.getAttribute(USER_CODE_SESSION_KEY) == null){
  
         throw new Exception();
         
      }else{
        return true;
      }
    }
 
    return true;
 
  }
  public void handlerSession(HttpServletRequest request) {
    String sessionId = request.getHeader(SESSION_KEY);
    if(org.apache.commons.lang3.StringUtils.isBlank(sessionId)){
      sessionId=(String) request.getSession().getAttribute(SESSION_KEY);
    }
    if (org.apache.commons.lang3.StringUtils.isNotBlank(sessionId)) {
      SessionData model = (SessionData) redisUtils.get(SESSION_KEY_PREFIX+sessionId);
      if (model == null) {
        return ;
      }
      request.setAttribute(SESSION_KEY,sessionId);
      Integer userCode = model.getUserCode();
      if (userCode != null) {
        request.setAttribute(USER_CODE_SESSION_KEY, Long.valueOf(userCode));
      }
      String mobile = model.getMobileNumber();
      if (mobile != null) {
        request.setAttribute(MOBILE_NUMBER_SESSION_KEY, mobile);
      }
    }
    return ;
  }
}

5、配置攔截器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package com.demo.interceptor;
 
import org.hibernate.validator.HibernateValidator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.validation.Validator;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.*;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
 
/**
 * Created by huguoju on 2016/12/30.
 */
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.demo.controller")
@PropertySource(value = "classpath:application.properties",
    ignoreResourceNotFound = true,encoding = "UTF-8")
public class MvcConfig extends WebMvcConfigurerAdapter {
  private static final Logger logger = LoggerFactory.getLogger(MvcConfig.class);
  @Autowired
  LoginInterceptor loginInterceptor;
 
  /**
 
   * <p>
   *   視圖處理器
   * </p>
   *
   * @return
   */
  @Bean
  public ViewResolver viewResolver() {
    logger.info("ViewResolver");
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setPrefix("/WEB-INF/jsp/");
    viewResolver.setSuffix(".jsp");
    return viewResolver;
  }
 
  /**
   * 攔截器配置
   * @param registry
   */
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    // 注冊監控攔截器
    registry.addInterceptor(loginInterceptor)
        .addPathPatterns("/**")
     .excludePathPatterns("/configuration/ui");
 
  }
 
  @Override
  public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
        .allowedOrigins("*")
        .allowedHeaders("*/*")
        .allowedMethods("*")
        .maxAge(120);
  }
 
  /**
   * 資源處理器
   * @param registry
   */
  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    logger.info("addResourceHandlers");
    registry.addResourceHandler("/swagger-ui.html")
        .addResourceLocations("classpath:/META-INF/resources/");
    registry.addResourceHandler("/webjars/**")
        .addResourceLocations("classpath:/META-INF/resources/webjars/");
  }
 
}

以上就完成了,測試時可以在LoginInterceptor里打斷點,然后在controller上或者方法上添加@Auth注解,
controller上添加以后這個controller里所有請求都驗證登錄,在方法里添加只有請求這個方法時驗證

?
1
2
3
@Auth
@RestController
public class TestController {  }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/u011493599/article/details/53942757

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日日摸夜夜骑 | 亚洲xxx视频 | av在线免费看网站 | 久久精品a一级国产免视看成人 | 日韩视频―中文字幕 | 成人免费自拍视频 | 欧美亚洲免费 | 国产va在线观看 | 国产一级一国产一级毛片 | 今井夏帆av一区二区 | 高潮激情aaaaa免费看 | 色的综合 | 亚洲一区二区三区四区精品 | 久久精精品| 精品国产一区二区三区天美传媒 | 在线免费日韩 | 在线成人av观看 | 可以看逼的视频 | 特片网久久 | 成人 精品 | 免费在线观看亚洲 | 亚洲一区二区三区在线免费观看 | 91美女啪啪| 中文字幕在线观看免费视频 | 法国性经典xxxhd | 色人阁导航| 日韩色视频在线观看 | qyl在线视频精品免费观看 | 日韩毛片在线看 | 精品久久久久久综合日本 | 毛片在线视频在线播放 | 久久国产精品二国产精品中国洋人 | 蜜桃视频观看麻豆 | 久久久久久久久久久高潮一区二区 | 夜夜看| 久久久婷婷一区二区三区不卡 | 久久av一区二区 | 一级片999 | 成年免费大片黄在线观看岛国 | 亚洲国产精品500在线观看 | 成年免费观看视频 |