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";
}
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();
}
}
这个需要看你的这两个变量都是怎么得到的,一般你这种情况都是代码逻辑有问题导致的,最好把代码贴出来看下
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
代码可能存在一些安全性问题,建议对代码进行修改以加强安全性。
至于你提到的问题,可能是由于代码中没有对用户是否在数据库中进行判断。可以通过以下方式进行修复:
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
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走一遍流程不就能知道代码有没有问题了