Springでのログインチェックの方法が分からず困っています。
未ログイン状態でログイン画面以外の画面を表示しようとした際に、ログイン画面に遷移させる処理を行いたいです。
しかし、現状のコードではIDとパスワードを入力してログインしようとしてもログイン画面に戻される状態となっています。
※フィルタのコードを書き換えました。ログイン処理以外にフィルタを実施するための書き方が分からないのでご教示いただけないでしょうか。
ログインコントローラ @Controller public class LoginController { /** * 社員情報 */ @Autowired EmployeeRepository employeeRepository; /** * セッション情報 */ @Autowired HttpSession session; @RequestMapping(path = "/login", method = RequestMethod.GET) public String login(@ModelAttribute LoginForm form) { return "index"; } @RequestMapping(path = "/login", method = RequestMethod.POST) public String doLogin(@Valid @ModelAttribute LoginForm form, BindingResult result) { if (result.hasErrors()) { return login(form); } else { //▼DB接続:ログイン承認 Employee employee = employeeRepository.findByEmpIdAndEmpPass(form.getEmpId(), form.getEmpPass()); //▲戻り値は 「Employeeのオブジェクトの参照」or「null」 session.setAttribute("user", employee); return "redirect:/list"; } } /** * ログアウト処理 */ @RequestMapping(path = "/logout", method = RequestMethod.GET) public String logout() { // セッションの破棄 session.invalidate(); return "redirect:/login"; } }
ログインチェックフィルタ @Component public class LoginCheckFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // リクエスト情報を取得 HttpServletRequest httpRequest = (HttpServletRequest) request; if (checkRequestURL(httpRequest)) { // セッション情報を取得 HttpSession session = httpRequest.getSession(); if (session.getAttribute("user") == null) { // 不正アクセスの場合、ログイン画面にリダイレクト // レスポンス情報を取得 HttpServletResponse httpResponse = (HttpServletResponse) response; // ログイン画面へリダイレクト httpResponse.sendRedirect(httpRequest.getContextPath() + "/login"); } else { chain.doFilter(request, response); } } else { chain.doFilter(request, response); } }
インターセプターでやったほうが良さそうに思いますが、そもそもなにを参考にこのコードを書かれたのでしょうか。
所持しているテキストを参考にコードを書いたのですが、すべてのURLにフィルターが作動してしまっている状況です。インターセプターも調べたのですが、何分あまり詳しく習っておらず理解も乏しいため、フィルターを使用しているといった感じです。
セッション属性にempIdの名前で値が入っている前提だと思われますが、empIdは正しくセッション属性へ格納されているコードがないため判断はできません。セッション属性へempIdはログインが完了したあとに格納しているのでしょうか。
自分でも記述して混乱してきたため、フィルタの書き方を改め、ログインコントローラのコードを載せました。
そのうえで今一度確認していただけると幸いです。
回答1件
あなたの回答
tips
プレビュー