Javaアノテーション - ログインしている場合、認証を達成するためのインターセプタバインディング

具体的なコードは次のよう:

java.lang.annotation.Documentedインポート、
インポートjava.lang.annotation.ElementType; 
インポートjava.lang.annotation.Retention; 
インポートjava.lang.annotation.RetentionPolicy; 
インポートjava.lang.annotation.Target; 

/ ** 
 *注釈この注釈付きコントローラは、ログインする必要がない
 小さな尼寺間@author地上の混乱* 
 * 
 * / 
ノートはJavaDocを処理するかどうかを示し、文書内に残る@Documented // 
@Target({ElementType.METHOD、ElementType.TYPE}) // 使用されるローカル注釈
@Retention(RetentionPolicy.RUNTIME)//ソース保持レベル
パブリック@interfaceのNOLOGIN { 
	
}
CheckLoginInterceptor:
インポートのjavax.servlet.http.HttpServletRequest; 
インポートのjavax.servlet.http.HttpServletResponse; 
輸入org.apache.log4j.Logger。
輸入org.springframework.web.method.HandlerMethod; 
輸入org.springframework.web.servlet.HandlerInterceptor。
輸入org.springframework.web.servlet.ModelAndView。

パブリッククラスCheckLoginInterceptorはHandlerInterceptor {実装

	プライベート静的最終ロガーロガー= Logger.getLogger(CheckLoginInterceptor.class)を、
	
	@Override 
	パブリックブールpreHandle(HttpServletRequestのリクエスト、HttpServletResponseの応答、オブジェクト・ハンドラ)が
			例外{スロー
		// TODO自動生成方法スタブを 
		(HandlerMethodのinstanceof!(ハンドラ))場合には{
			logger.warn( "当前操作ハンドラ不为HandlerMethod =" + handler.getClass()のgetName()+ "REQ =" + request.getQueryString())。
			trueを返します。
		} 
		
		HandlerMethod handlerMethod =(HandlerMethod)ハンドラ。
		文字列methodNameの= handlerMethod.getMethod()のgetName()。
		。NOLOGIN NOLOGIN = handlerMethod.getMethod()getAnnotation(NoLogin.class)。
		IF(!= NULL NOLOGIN){ 
			logger.info( "当前访问methodNameの=" + methodNameの+ "不需要登陆")。
			System.out.println( "当前访问methodNameの=" + methodNameの+ "不需要登陆")。
			trueを返します。
		} 
		
		NOLOGIN = handlerMethod.getMethod()のgetDeclaringClass()getAnnotation(NoLogin.class)。
		(ヌル!= NOLOGIN){場合
			「(logger.info 
			のSystem.out.println(」
			trueを返すように; 
		} 
		
		//認証要求は、セッションを含ん
		(でrequest.getSession == NULL()){IF 
			logger.info( "現在のアクセスmethodNameの=" + methodNameの+ "ユーザーがログインしていないIPは=" + request.getRemoteAddr( )); 
			System.out.printlnは( "現在のアクセスmethodNameの=" + methodNameの+ "ユーザでログインしていない、IP =" + request.getRemoteAddr()); 
			falseを返す; 
		} 
		logger.info( "現在のアクセスmethodNameの=" + methodNameの+) "ログインする必要があります"; 
		System.out.printlnは( "現在のアクセスmethodNameに=" + methodNameの+) "にログインする必要があります"; 
		falseを返す; 
	} 

	@Override 
	ます。public void postHandle(リクエストのHttpServletRequest、HttpServletResponseの応答は、ハンドラー、オブジェクト 
	@Overrideオブジェクト・ハンドラ
			のModelAndViewのModelAndViewは){例外をスロー
		// TODO自動生成方法スタブ

	}

	公共ボイドafterCompletionは、(HttpServletRequestのリクエスト、HttpServletResponseの応答、オブジェクト・ハンドラは、例外EX)が
			例外をスロー{ 
		// TODO自動生成方法スタブ

	} 

}
InterceptorConfig:
輸入はjava.util.List; 
輸入org.springframework.context.annotation.Configuration。
輸入org.springframework.format.FormatterRegistry。
輸入org.springframework.http.converter.HttpMessageConverter。
輸入org.springframework.validation.MessageCodesResolver; 
輸入org.springframework.validation.Validator。
輸入org.springframework.web.method.support.HandlerMethodArgumentResolver; 
輸入org.springframework.web.method.support.HandlerMethodReturnValueHandler。
輸入org.springframework.web.servlet.HandlerExceptionResolver; 
輸入org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer。
輸入org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer。
輸入org.springframework.web.servlet.config.annotation.CorsRegistry。
輸入org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer。
輸入org.springframework.web.servlet.config.annotation.InterceptorRegistry。
輸入org.springframework.web.servlet.config.annotation.PathMatchConfigurer。
輸入org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry。
輸入org.springframework.web.servlet.config.annotation.ViewControllerRegistry。
輸入org.springframework.web.servlet.config.annotation.ViewResolverRegistry。
輸入org.springframework.web.servlet.config.annotation.WebMvcConfigurer。//也可以继承WebMvcConfigurerAdapter类只重写addInterceptors方法、下面代码比较啰嗦
@Configuration

パブリッククラスInterceptorConfigが実装WebMvcConfigurer { @Override 公共ボイドconfigurePathMatch(PathMatchConfigurer構成器){ // TODO自動生成方法スタブ } @Override 公共ボイドconfigureContentNegotiation(ContentNegotiationConfigurer構成器){ // TODO自動生成方法スタブ } @Override 公共ボイドconfigureAsyncSupport(AsyncSupportConfigurer構成器){ // TODO自動-generated方法スタブ } @Override 公共ボイドconfigureDefaultServletHandling(DefaultServletHandlerConfigurer構成器){ // TODO自動生成方法スタブ } @Override 公共ボイドaddFormatters(FormatterRegistryレジストリ){ // TODO自動生成方法スタブ } @Override ます。public void addInterceptors(InterceptorRegistryレジストリ){ registry.addInterceptor(新CheckLoginInterceptor())addPathPatterns( "/ **")。 } @Override 公共ボイドaddResourceHandlers(ResourceHandlerRegistryレジストリ){ // TODO自動生成方法スタブ } @Override 公共ボイドaddCorsMappings(CorsRegistryレジストリ){ // TODO自動生成方法スタブ } @Override 公共ボイドaddViewControllers(ViewControllerRegistryレジストリ){ / / TODO自動生成方法スタブ } @Override 公共ボイドconfigureViewResolvers(ViewResolverRegistryレジストリ){ // TODO自動生成方法スタブ } @Override 公共ボイドaddArgumentResolvers(一覧<HandlerMethodArgumentResolver> argumentResolvers){ // TODO自動生成方法スタブ } @Override 公共ボイドaddReturnValueHandlers(一覧<HandlerMethodReturnValueHandler> returnValueHandlers){ // TODO自動生成方法スタブ } @Override 公共ボイドconfigureMessageConverters(リスト<HttpMessageConverter <?>>コンバータ){ // TODO自動生成方法スタブ } @Override 公共ボイドextendMessageConverters(一覧<HttpMessageConverter <?>>コンバータ) { // TODO自動生成方法スタブ } @Override 公共ボイドconfigureHandlerExceptionResolvers(リスト<HandlerExceptionResolver>exceptionResolvers){ // TODO自動生成方法スタブ } @Override 公共ボイドextendHandlerExceptionResolvers(一覧<HandlerExceptionResolver> exceptionResolvers){ // TODO自動生成方法スタブ } @Override 公共検証getValidator(){ // TODO自動生成方法スタブ 戻りヌル。 } @Override 公共MessageCodesResolver getMessageCodesResolver(){ // TODO自動生成方法スタブ 戻りヌル。 } }
テストコントローラ:
輸入org.springframework.stereotype.Controller。
輸入org.springframework.web.bind.annotation.GetMapping。
輸入org.springframework.web.bind.annotation.ResponseBody。

@Controller 
パブリッククラスTestController { 
	
	@NoLogin 
	@GetMapping( "/ユーザー/ login.htm")
	@ResponseBody 
	ます。public voidログイン(文字列名、文字列のパスワード){ 
		
	} 
	
	@ResponseBody 
	@GetMapping( "/ユーザー/ userInfo.htm")
	公共無効getUserInfo(ロングUSERID){ 
		
	} 
	
	@NoLogin 
	@ResponseBody 
	@GetMapping( "/ユーザー/のregister.htm")
	公共ボイドレジスタ(文字列名、文字列のパスワード){ 
		
	} 
}

  業績:

2019年6月29日00:17:41.222 INFO 11388 --- [NIO-8001-EXEC-1] www.mxh.com.CheckLoginInterceptor: 現在のアクセスmethodNameの= getUserInfoログインする必要があり
、現在のアクセスをmethodNameの= getUserInfoログインする必要
2019-06- 29 00:17:57.987 INFO 11388 --- [NIO-8001-EXEC-4] www.mxh.com.CheckLoginInterceptor: 現在のアクセスmethodNameの=ログインがログインする必要がない
=ログインがログインを必要としない現在のアクセスmethodNameの
2019-06-2900を:27:37.214 INFO 11388 --- [ NIO-8001-EXEC-9] www.mxh.com.CheckLoginInterceptor: 現在のアクセスmethodNameの=レジスタにログインする必要はありません
ログインする必要がありません現在のアクセスmethodNameのレジスタ=

  

おすすめ

転載: www.cnblogs.com/mxh-java/p/11105401.html