前后端连接完后的各种安全问题

前后端连接完后的各种安全问题:

当我们完成前后端链接后,这只是第一步,接下来各种安全问题才是前后端交互的重中之重。

后端:

一.管理员

当前端把账号密码之类的用户信息传来后端后,我们还需要一个管理员来保存这些数据,而我们要返回给前端保存在浏览器的数据是管理员的数据,这样把数据封装到类里,方便我们进行各种操作。

Admin:

java 复制代码
public class Admin {
    private int id;
    private String account;
    private String password;
    private String gender;
    private String phone;
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Admin(){};
    public Admin(int id,String account,String password,String gender,String phone,String name){
        this.account=account;
        this.id=id;
        this.password=password;
        this.phone=phone;
        this.gender=gender;
        this.name=name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}

二.dao层

Dao中查到数据后把其交给管理员:

java 复制代码
			ResultSet rs=ps.executeQuery();
            //查到后把数据交给管理员
            while(rs.next()){
                admin=new Admin();
                admin.setId(rs.getInt("id"));
                admin.setAccount(rs.getString("account"));
                admin.setGender(rs.getString("gender"));
                admin.setPassword(rs.getString("password"));
                admin.setPhone(rs.getString("phone"));
                admin.setName(rs.getString("name"));
            }
            return admin;

这里返回一个管理员类,这是因为最终返回前端的信息一般都有一个格式就是

(code,desc,result),code表示当前链接状况,desc表示要提示的信息,result里面是要返回的保存数据的类,也就是管理员类

三.Servlet

所以Servlet中接收到前端的数据后然后交给dao层判断,如果dao层返回了一个admin说明在数据库查到了该用户,如果返回admin是空说明没查到:

java 复制代码
        //接收前端提交的数据
        String account=req.getParameter("account");
        String password=req.getParameter("password");
        //调用其他的java程序处理 例如调用dao层 与数据库交互
        LoginDao loginDao=new LoginDao();
        Result<Admin> result=null;
        try {
            Admin admin=loginDao.login(account,password);
            //向前端做出相应
            if(admin!=null){
                result=new Result<>(200,"登录成功",admin);
            }else {
                result=new Result<>(201,"账号或密码错误",null);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            result=new Result<>(500,"系统忙",null);
        }
resp.getWriter().print(newObjectMapper().writeValueAsString(result));

四.Result

其中Result就是保存code,desc,result的:

java 复制代码
public class Result<T> {
    private int code;
    private String desc;
    private T result;

    public Result(){};

    public Result(int code,String desc,T result){
        this.code=code;
        this.desc=desc;
        this.result=result;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public T getResult() {
        return result;
    }

    public void setResult(T result) {
        this.result = result;
    }
}

前端:

一.接收后端的响应:

我们需要把后端的数据送到session(会话)或者cookie里,(cookie可以一直保存,会话会随着浏览器关闭而消失)。然后前端就可以随时从cookie或者会话中得到这些数据

js 复制代码
		   //与后端进行交互
		   this.$http.post("login","account="+this.form.account+"&password="+this.form.password).then((resp)=>{
			   //根据后端响应回来的结果进行处理
			   if(resp.data.code==200){
				   //登陆成功
				sessionStorage.setItem("account",resp.data.result.account);
				sessionStorage.setItem("gender",resp.data.result.gender);
				sessionStorage.setItem("name",resp.data.result.name);
				sessionStorage.setItem("phone",resp.data.result.phone);
				sessionStorage.setItem("id",resp.data.result.id);
				this.$router.push("/viewmain");
			   }else if(resp.data.code==201){
				   this.$message({message:resp.data.desc,type:'warning'});
				   return;
			   }else if(resp.data.code==500){
				   this.$message({message:resp.data.desc,type:'warning'});
				   return;
			   }
		   });

二.从会话中获得信息显示在浏览器:

html 复制代码
		        <span>{{form.user_name}}</span>
js 复制代码
 export default{
	 data(){
		 return{
			 form:{
			 	user_name:"",
			 }
		 }
	 },
	 methods:{
	 },
	 mounted(){
		this.form.user_name=sessionStorage.getItem("name");
	 }
 }

三.路由导航卫士:

为了防止未登录便进入到主菜单等vue,我们需要路由导航卫士检测如果会话中没有保存登陆账户说明没有登录上,所以不可以进入到除login组件以外的组件。0

js 复制代码
//每发生一次路由跳转时,自动触发beforeEach()
rout.beforeEach((to,from,next)=>{
	if(to.path=='/login'){	//如果访问登陆组件,不需要任何判断,直接放行
		return next();
	}else{
		var account=window.sessionStorage.getItem("account");
		if(account==null){	//用户信息为空,说明用户没有登录
			return next("/login");
		}else{	//说明用户以及登录
			next();
		}
	}
})
相关推荐
一只特立独行的猪6111 小时前
Java面试——集合篇
java·开发语言·面试
让开,我要吃人了2 小时前
HarmonyOS开发实战(5.0)实现二楼上划进入首页效果详解
前端·华为·程序员·移动开发·harmonyos·鸿蒙·鸿蒙系统
讓丄帝愛伱2 小时前
spring boot启动报错:so that it conforms to the canonical names requirements
java·spring boot·后端
weixin_586062022 小时前
Spring Boot 入门指南
java·spring boot·后端
SuperherRo3 小时前
蓝队技能-应急响应篇&Web内存马查杀&JVM分析&Class提取&诊断反编译&日志定性
servlet·filter·蓝队·内存马
everyStudy3 小时前
前端五种排序
前端·算法·排序算法
甜兒.4 小时前
鸿蒙小技巧
前端·华为·typescript·harmonyos
Dola_Pan5 小时前
Linux文件IO(二)-文件操作使用详解
java·linux·服务器
wang_book5 小时前
Gitlab学习(007 gitlab项目操作)
java·运维·git·学习·spring·gitlab
蜗牛^^O^6 小时前
Docker和K8S
java·docker·kubernetes