数据库连接成功,但是无论在不在数据库里的用户都能登陆成功

https://blog.csdn.net/qq_54196404/article/details/117794504?spm=1001.2014.3001.5506
抄的这个代码,但是只要用户跟密码不为空就可以登录,发现是${}不显示,并且添加<%@ page isELIgnored="false" %>后也不显示

遇到这种问题,不就是判断有问题吗
将user中的用户名、密码输出看下对不对不就行了吗。

你放出来的代码看起来没问题
写个输出,看一下代码走没走第一张图的方法

以下内容引用CHATGPT:

这个问题可能是由于service层没有正确实现导致的。建议检查一下UserService的实现,确保在登陆时进行了用户信息的验证。可以尝试将UserService的实现改为以下代码:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public boolean login(String username, String password) {
        User user = userRepository.findByUsername(username);
        if (user != null && user.getPassword().equals(password)) {
            return true;
        }
        return false;
    }
}

这样的实现会根据传入的用户名和密码,在数据库中进行查找并验证,只有当用户信息正确时才会返回true,否则返回false。同时,也建议在controller中进行参数的校验,确保传入的参数正确。例如:

@PostMapping("/login")
public String login(@RequestParam("username") String username, @RequestParam("password") String password, Model model) {
    if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
        model.addAttribute("message", "用户名或密码不能为空");
        return "login";
    }
    if (!userService.login(username, password)) {
        model.addAttribute("message", "用户名或密码错误");
        return "login";
    }
    model.addAttribute("username", username);
    return "index";
}
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/168862
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:安卓 开启service每分钟执行一次任务 模拟定时 或者定时任务
  • 除此之外, 这篇博客: 多线程应用:定时任务重发机制实现中的 第四步:任务处理Service实现 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • public class TaskARQService implements ITaskARQ {
        /** 执行时间到达时, 所有的线程需要依次退出, 主线程才开始统计执行事物总数 */
        private static CountDownLatch countDownLatch;
        private ExecutorService executorService;
        
    	public BaseSvcResp exe() {
    		//1.初始化线程池大小
    		executorService = Executors.newFixedThreadPool(poolSize);
    		//2.查询满足条件的记录数
    		List<TblPipbatBatSt> filter = batStMapper.selectByWhiteList(allowList);
    		//3.初始化CountDownLatch容量大小,用于统计并发线程的结束的状态
    		countDownLatch = new CountDownLatch(ableList.size());
    		//4.根据任务数量,循环创建重发任务线程去执行
    		for (TblPipbatBatSt batSt : ableList) {
    			TaskEvent taskEvent = new TaskEvent();
    			//TODO ... 构建taskEvent对象
    			executorService.submit(new Worker(job, taskEvent));
    		}
    		//5.等待所有线程结束
    		try {
                countDownLatch.await();
                logger.info("所有线程执行结束-----------------");
            } catch (InterruptedException e) {
                //do something....
            }
            //6.关闭资源
            executorService.shutdown();
    	}
    }
    
  • 您还可以看一下 张旭老师的【造物者】手把手带你做快递管理系统课程中的 【造物者】第十三节·快递Service编写小节, 巩固相关知识点

这个需要看你的这两个变量都是怎么得到的,一般你这种情况都是代码逻辑有问题导致的,最好把代码贴出来看下

img

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
代码可能存在一些安全性问题,建议对代码进行修改以加强安全性。

至于你提到的问题,可能是由于代码中没有对用户是否在数据库中进行判断。可以通过以下方式进行修复:

  1. validate_login函数中,查询数据库以判断用户是否存在。
def validate_login(username, password):
    con = sqlite3.connect('database.db')
    cur = con.cursor()
    user = cur.execute("SELECT * FROM users WHERE username = ?", [username]).fetchone()
    if user and check_password_hash(user[2], password):
        return True
    else:
        return False
  1. register函数中,向数据库中插入用户前,先判断用户是否已经存在。
def register():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        con = sqlite3.connect('database.db')
        cur = con.cursor()
        user = cur.execute("SELECT * FROM users WHERE username = ?", [username]).fetchone()
        if user:
            flash("User already exists. Try Login instead")
            return redirect(url_for('login'))
        else:
            password = generate_password_hash(password)
            cur.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, password))
            con.commit()
            flash("Registeration Sucessful. Please Login.")
            return redirect(url_for('login'))
    return render_template('register.html')

这样可以确保只有在数据库中已存在的用户才能成功登陆,新注册的用户也不会与已有用户重复。
如果我的回答解决了您的问题,请采纳!

debug走一遍流程不就能知道代码有没有问题了