SpringBootブロッキング構成

5339 ワード

一、URLに基づいて実現するブロック:

public class LoginInterceptor extends HandlerInterceptor{	/**www.1b23.com
     *  (Controller )
     *  URL 
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override  
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String path = request.getServletPath();
        if (path.matches(Const.NO_INTERCEPTOR_PATH)) {        	//             return true;
        } else {        	//  , ,SESSION, 
            System.out.println("====================================");            return true;
        }
    }
}

キーコード:path.matches(Const.NO_INTERCEPTOR_PATH)は、正規マッチングに基づくurlである.
import com.example.demo1.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/** *
 *java www.1b23.com
 * @Package: com.*.*.config * 
 @ClassName: LoginConfig * 
 @Description: * 
 author: zk * 
 @date: 2019 9 19   2:18:35 *
 /@Configurationpublic class LoginConfig implements WebMvcConfigurer 
 {    @Overridepublic void addInterceptors(InterceptorRegistry registry) 
 {        // TestInterceptor InterceptorRegistration registration = registry.addInterceptor(new LoginInterceptor());
        registration.addPathPatterns("/**");                      // }
}
/**java www.1b23.com * @author 	BianP
 * @explain  
 */public class Const {  
   public static final String SUCCESS = "SUCCESS"; 
      public static final String ERROR = "ERROR";  
        public static final String FIALL = "FIALL"; 
           /********************** ****************************/ 
              public static final String SESSION_USER = "loginedAgent"; 
              //      public static final String SESSION_LOGINID = "sessionLoginID"; 
              //  ID    public static final String SESSION_USERID = "sessionUserID"; 
              //  ID     public static final String SESSION_USERNAME = "sessionUserName";
               //  ID     public static final Integer PAGE = 10; 
               //      public static final String SESSION_URL = "sessionUrl";
                //  url    public static final String SESSION_SECURITY_CODE = "sessionVerifyCode";
                 //  
    //       
     public static final int TIMEOUT = 1800;
     //  	public static final String ON_LOGIN = "/logout.htm";	
     public static final String LOGIN_OUT = "/toLogout";    
     //  URL anon: /authc:    
      public static final String NO_INTERCEPTOR_PATH =".*/((.css)|(.js)|(images)|(login)|(anon)).*";
}

二、注釈に基づくブロック


①注記の作成:
/**
 *  Controller java www.1b23.com
 */@Target({ElementType.METHOD})//  
@Retention(RetentionPolicy.RUNTIME)//  
public @interface LoginRequired {
	
}

②ブロッキングの作成:
public class AuthorityInterceptor extends HandlerInterceptorAdapter{	
	 @Override	 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {	 	//          if (!(handler instanceof HandlerMethod)) {
            return true;
        }        // ①:START  
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        Method method = handlerMethod.getMethod();
        //  
        LoginRequired methodAnnotation = method.getAnnotation(LoginRequired.class);        //   @LoginRequired  ,         if (methodAnnotation != null) {            //  , ,SESSION, 
            System.out.println("====================================");            return true;
        }
        return true;
	}
}

三、ブロッカーを配置に追加し、SpringMVC時の配置ファイルに相当すること:
/**
 *  springmvc webmvc 
 * @author BIANP java www.1b23.com
 */@Configurationpublic class WebConfigurer implements WebMvcConfigurer {	 @Override	 public void addInterceptors(InterceptorRegistry registry) {        //  ,  @LoginRequired    
        registry.addInterceptor(LoginInterceptor()).addPathPatterns("/**");
        registry.addInterceptor(AuthorityInterceptor()).addPathPatterns("/**");
	 }	 
	 @Bean	 public LoginInterceptor LoginInterceptor() {		 return new LoginInterceptor();
	 }	 
	 @Bean	 public AuthorityInterceptor AuthorityInterceptor() {		 return new AuthorityInterceptor();
	 }
}

1、必ず@Configurationという注釈を付け、起動時にロードされます.
2、いくつかのチュートリアルは「WebMvcConfigurerAdapter」を使っていますが、spring 5では.0バージョン以降、このクラスはWebMvcConfigurerAdapterに破棄され、まだ使えますが、よく見えません.
3、いくつかのチュートリアルで使用されているWebMvcConfigurationSupportもありますが、classpath:/META/resources/,classpath:/resources/,classpath:/static/,classpath:/public/)は有効ではありません.具体的には、WebMvcAutoConfigurationに条件注記があるので、ソースコードを見てみましょう.
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)

だからやはりWebMvcConfigurerを使うことをお勧めしますが、実はspringMVCの多くのものはspringbootに移して使うことができます.プロファイルのパターンを、対応@Configurationクラスに変えるだけでいいです.
HandlerInterceptor