java - Spring Framework - JDBC 登录
问题描述
我一直在尝试使用 spring 创建一个简单的 JDBC 登录页面,但我不知道如何解决这个问题。我输入了真实数据库中显示的正确用户名和密码,但它没有让我登录?
它应该让我登录,然后将我转发到仅限员工的管理页面。但一切都变成了登录错误
登录控制器:
@Controller
public class LoginController {
@Autowired
private UserServiceImpl userService;
@GetMapping("/login")
public String showLoginForm(Model model) {
User user = new User();
model.addAttribute("user", user);
return "login";
}
@PostMapping("/processLogin")
public String processLogin(@ModelAttribute("user") User user, Model model) {
if (userService.findUser(user.getUsername(), user.getPassword()) == null) {
return "/access-denied";
} else {
return "/management/dashboard";
}
}
@GetMapping("/access-denied")
public String accessDenied(Model model) {
return "access-denied";
}
登录表单(JSP 页面):
<form:form method="post" modelAttribute="user"
action="${pageContext.request.contextPath}/processLogin">
<div class="form-group">
<div class="form-label-group">
<label for="inputUser">Username: </label> <input name="username"
type="text" path="username" id="inputUser" class="form-control"
placeholder="Username" required="required" autofocus="autofocus">
</div>
</div>
<div class="form-group">
<div class="form-label-group">
<label for="inputPassword">Password: </label>
<input name="username" type="password" path="password"
id="inputPassword" class="form-control" placeholder="Password"
required="required">
</div>
</div>
<div class="form-group">
<div class="checkbox">
<label> <input type="checkbox" value="remember-me">
Remember Password
</label>
</div>
</div>
<input type="submit" value="Login"/>
</form:form>
USER DAO(查询用户):
@Autowired
private SessionFactory sessionFactory;
@Override
@Transactional
public User findUser(String username, String password) {
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Query<User> theQuery = session.createQuery("from User
where username=:username", User.class);
User user = theQuery.getSingleResult();
session.close();
if (user.getPassword().equals(password)) {
return user;
}
return null;
}
用户实体:
@Entity
@Table(name = "users")
public class User {
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
public User() {
}
// and all the getters/setters
数据库表:
CREATE TABLE `users` (
`username` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
`enabled` tinyint(1) NOT NULL,
PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `users`
VALUES
('john','{noop}test123',1),
('mary','{noop}test123',1),
('susan','{noop}test123',1);
解决方案
推荐阅读
- jenkins - Jenkins 正在重新使用管道工作区,我希望每个构建都有一个独特的工作区
- c++ - 我应该删除矢量
? - node.js - 远程运行 bash 命令并模拟击键
- c - 将指针常量初始化为另一个指针常量内的字段?
- c++ - C++ - 我可以创建另一个类的成员并在构造函数中使用它吗?
- azure - 将 S3 增量复制到 azure blob
- c++ - 将 RGB 图像保存为 PPM 格式
- r - 无法使用 ChoroplethrZip 包中的 get_zip_demographics() 函数提取 Zip 人口统计数据
- laravel - 如何安装/卸载 Laravel 主管(supervisorctl)?
- javascript - 为什么第二个警报不显示