TIL(Web)-2020.12.22~12.23(Session)


今日、ユーザー認証とパーミッションセッションについて学習しました.

Today I Learned

  • Session
  • Session

  • 語源:特定の期間(トピック)
  • すなわちユーザがサービスを利用する時間
  • である.
    では、ユーザーをどのように区別し、ユーザーの使用時間を知るのでしょうか.
  • WAS
    管理
  • セッション情報
  • 初回要求時にSIDを提供し、ユーザに空間
  • を空ける.
  • ユーザは、セッション情報を要求ヘッダに入れて要求を送信する.
  • (最初のユーザにはセッション情報がありません)
  • これらのセッション情報はブラウザを有し、オンデマンドで送信可能であり、
  • .
  • ブラウザが閉じていると、セッション情報も消えます.
  • サーバは、許可されたすべてのセッション情報を所有できません.
  • の有効期間は
  • であり、要求がなければセッション初期化(SessionTimeout)
  • である.
  • Tomcatサーバ上のweb.xmlでプリファレンスを設定し、各アプリケーションの設定のために各アプリケーションのwebを設定します.xmlをオーバーシュート設定すればいいです.
  • セッションを作成するタイミング
  • セッションの使用時に作成された
  • セッション空間を使用するときに、ユーザを識別するIDが発行される.
  • (ユーザーを識別する必要はありません)
  • jspが要求すると、jspのコンパイル時にセッションを含むビルトインオブジェクトが作成され、ビルトインオブジェクトにセッションID
  • が提供される.

    サーバがユーザーを識別する方法


    保存ステータス
  • webは、接続を切断した場合にサービスを提供する必要がある.
  • グローバル変数のように、呼び出すたびに使用可能なリポジトリが使用されます.
  • リポジトリに格納された情報を使用して、認証および認可を行うことができます.
  • 認証後

  • 登録後どこに送信されますか?
  • メイン画面から電子画面に登録すれば、メイン画面にリダイレクトするだけです.
  • しかし、他の場所で認証の問題でログインした場合?既存の場所に戻る必要があります.
  • 以前のページコントローラでは、戻り設定が必要です.
  • response.sendRedirect("/signin?return-url=/user/userInfo/memberInfo");
  • ただしこのように送信するとget方式で送信され、ログイン後は
  • は使用できない.
    この問題を解決するには、
  • の非表示フィールドを使用します.
  • アイデンティティーのフィルタ

  • は、使用する必要があるすべての検証コードをフィルタに結合する.
  • doFilterを基準として前処理を行う.
  • 認証フィルタは、前処理が必要である.
  •   @WebFilter("/*")
    public class TeumSecurityFilter implements Filter{
    	private final static String[] authURLs = {
    			"/user/","/company/","/admin/"
    	};
    	
    	private final static String[] authUser = {
    			"/company/","/admin/"
    	};
    	private final static String[] authCompany = {
    			"/user/","/admin/"
    	};
    	private final static String[] authAdmin = {
    			"/user/","/company/"
    	};
    
    	@Override
    	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
    			throws IOException, ServletException {
    		HttpServletRequest request = ((HttpServletRequest) req);
    		HttpServletResponse response = ((HttpServletResponse)resp);
    		
    		String uri = request.getRequestURI();
    		// TODO Auto-generated method stub
    		HttpSession session = request.getSession();
    		
    		
    		boolean requireAuth = false;
    		for(String url : authURLs) {
    			if(uri.contains(url)) {
    				requireAuth = true;
    				break;
    			}
    		}
    		//인증이 필요한데 인증이 되어있지 않다
    		if(session.getAttribute("email")==null && requireAuth) {
    			
    			response.sendRedirect("/signin?return-url="+uri);
    			return;
    		}
    		
    		// 모든 페이지에 대해 로그인 여부 검사를 마침.
    		// 이제 각 로그인 타입별로 필터링 해줘야함
    		int type = (int)session.getAttribute("type");
    		
    		if(type == 0) {
    			boolean authByUser = false;
    			for(String url : authUser) {
    				if(uri.contains(s))
    			}
    		}
    		
    		
    		chain.doFilter(request,response);
    		
    		//테스트 완료.
    		//필터 설정을 위해서는 url 매핑을 깔끔하게 잘 해야한다.... 안그럼 예외적인 상황이 너무 많이 생긴다.
    	}
    
    }
     
    今日はここまで勉強しました!