前提・実現したいこと
SpringBootでログイン認証画面を作っています。
データベースにIDとPasswordをあらかじめ設定してあり、一致すれば先の画面にとぶようにしたいです。
発生している問題・エラーメッセージ
以下ソースコードではIDとPasswordがテーブル内のどこかに存在していれば認証してしまうため、AさんのIDとBさんのPasswordで画面に飛ぶことができてしまいます。
該当のソースコード
@Controller
@RequestMapping("employee")
public class LoginController {
@Autowired
LoginMapper loginMapper;
@GetMapping("login") public String login(Model model){ return "employee/login"; } @GetMapping("login2") public String login2(Model model){ return "employee/login2"; } @Autowired LoginMapper loginMapper; @GetMapping("/login2/{id}") public String login(@PathVariable("id") int id, String password, Model model){ LoginPageModel page = new LoginPageModel(); loginModel logins = loginMapper.findById(id); page.employee_id = logins.employee_id; LoginModel logins2 = loginMapper.findById3(password); page.employee_password = logins2.employee_password; model.addAttribute("page", page); return "employee/login"; } @PostMapping("/login2/{id}") public String login(@ModelAttribute LoginPageModel page, Model model){ //LoginPageModel page = new LoginPageModel(); try{ LoginModel logins = loginMapper.findById(page.employee_id); LoginModel logins2 = loginMapper.findById3(page.employee_password); if(page.employee_id == logins.employee_id && page.employee_password.equals(logins2.employee_password)){ return "employee/login2"; }else{ return "employee/aaa"; } }catch(NullPointerException e){ return "employee/aaa"; } }
public interface LoginMapper {
@Select("select * from employee where employee_id = #{id}")
public LoginModel findById(int id);
@Select("select * from employee where employee_password = #{password}") public LoginModel findById3(String password);
試したこと
Mapperの方を変えてみたりしましたが直らず、
考えてもわかりませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー