使用Java自定义注解Annotation实现登录验证

题目如下:

定义一个可以用来接收用户登录信息的Annotation,其中用户名和密码要求通过Annotation设置到验证的方法中,如下所示:

@LoginInfo(name="用户名",password="密码")
public boolean login(String name,String password){}

之后编写程序由键盘输入用户的登录信息,并通过login()方法判断输入的用户名和密码是否正确。

按照题目要求,我定义了一个Annotation,里面有name与password两个属性:

package annotationdemo01;
import java.lang.annotation.*;
@Target(ElementType.METHOD)				//只对方法有效
@Retention(RetentionPolicy.RUNTIME)		//运行时有效
public @interface LoginInfo {			//定义注解
	public String name() default "null";		
	public String password()	default "null";	
}

接着通过BufferedReader得到键盘输入信息,通过反射机制得到Annotation内容,并进行验证:

package annotationdemo01;
import java.io.*;
import java.lang.reflect.*;
class Validate {
	private  String name;
	private String password;
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	public String getName() throws IOException {			//获取账号
			System.out.println("请输入账号:");				
			name = br.readLine();
			return name;
	}
	public String getPassword() throws IOException {		//获取密码
			System.out.println("请输入密码:");
			password = br.readLine();
			return password;
}
	@LoginInfo(name="myk",password="123456")				//使用自定义注解
	public boolean login(String name,String password) {	
		 boolean flag = false;
	        Method m = null;		
	        try{
	        	//通过反射取得login方法
	            m = Validate.class.getMethod("login",String.class,String.class);
	        }catch(Exception e){
	            e.printStackTrace();
	        }
	        //取得自定义注解对象
	        LoginInfo li = m.getAnnotation(LoginInfo.class);
	        if (li.name().equals(name)&&li.password().equals(password))
	        {
	            flag = true;
	        }
	        return flag;
	}
}

最后编写测试类:

package annotationdemo01;
import java.io.IOException;
public class Annotationdemo01 {
	public static void main(String args[]) throws IOException {
		String name;
		String password;
		Validate v=new Validate();
		name=v.getName();
		password=v.getPassword();
		if(v.login(name,password)==true) {
			System.out.println("账号密码正确");
		}else System.out.println("账号或密码错误");
	}
}

下面是输出结果:
在这里插入图片描述
在这里插入图片描述
注意在使用自定义Annotation时,设置的内容只能为常量表达式,不能为变量,所以无法动态使用。

以上代码使用JDK10,Eclipse编译器运行成功,如有错误或描述不当请多多指出。

觉得有用就点个赞呗~

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值