본문 바로가기

개발(합니다)/Java&Spring

Spring Security 정리 (5) : 로그인 성공 후 처리

반응형

로그인 성공 후처리에 관한 포스팅입니다.


로그인 성공 시

1. 성공 후 보여줄 페이지 결정
2. 성공 후 에러 세션 메세지 제거
3. 성공 후 실패 횟수 초기화


폴더 구성



Security-context.xml

    <beans:bean id="customizeAuthenticationSuccessHandler"
        class="com.otrodevym.mfaw.common.security.custom.CustomizeAuthenticationSuccessHandler">
        <beans:property name="loginIdName" value="user_id"></beans:property>
        <beans:property name="defaultUrl"
            value="/"></beans:property>
    </beans:bean>



CustomizeAuthenticationSuccessHandler.java

public class CustomizeAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
    private String loginIdName;
    private String defaultUrl;

    private RequestCache reqCache = new HttpSessionRequestCache();
    private RedirectStrategy redirectStratgy = new DefaultRedirectStrategy();
    
    @Inject
    private LoginService loginService;
    @Override
    public void onAuthenticationSuccess(HttpServletRequest req, HttpServletResponse res,
Authentication auth)
            throws IOException, ServletException {
//      System.err.println("로그인 성공");
//      res.sendRedirect(req.getContextPath() + "/");
        
//      로그인 실패 횟수 초기화
        String user_id = req.getParameter("user_id");
        loginService.resetFailureCount(user_id);
        
//      로그인 세션 지우기
        clrearAuthenticationAttributes(req);
//      이동 할 URL 지정
        resultRedirectStrategy(req, res, auth);
    }

    protected void resultRedirectStrategy(HttpServletRequest req, HttpServletResponse res,
            Authentication authentication) throws IOException, ServletException {
        SavedRequest savedRequest = reqCache.getRequest(req, res);

        if (savedRequest != null) {
            String targetUrl = savedRequest.getRedirectUrl();
            redirectStratgy.sendRedirect(req, res, targetUrl);
        } else {
            redirectStratgy.sendRedirect(req, res, defaultUrl);
        }

    }
    
    protected void clrearAuthenticationAttributes(HttpServletRequest req) {
        HttpSession session = req.getSession(false);
        if(session == null) return ;
        session.removeAttribute(WebAttributes.AUTHENTICATION_EXCEPTION);
    }

    public String getLoginIdName() {
        return loginIdName;
    }

    public void setLoginIdName(String loginIdName) {
        this.loginIdName = loginIdName;
    }

    public String getDefaultUrl() {
        return defaultUrl;
    }

    public void setDefaultUrl(String defaultUrl) {
        this.defaultUrl = defaultUrl;
    }

}


로그인 성공 후 보여줄 페이지

1. 접근 권한이 필요한 페이지에서 로그인을 했을 경우

2. 로그인 페이지에서 했을 경우


1번의 경우에는 세션정보를 저장하고 있는 RequestCache의 정보를 SavedRequest에 저장하고 이전에 페이지로 리다이렉트합니다.

2번의 경우에는 기본 default로 지정했던 페이지로 이동 시킵니다.





login.xml

    <update id="resetFailureCount" parameterType="java.lang.String">
        update login_info
        set
        fail_count = 0
        where user_id = #{userName}
    </update>


로그인 성공 시 실패 횟수를 초기화 합니다.





반응형