본문 바로가기

JSP

jsp day15 (Filter,깃 허브설치와 명령문)

728x90

필터란?.

필터의 생성방법

1. 필터 클래스는 일반 자바 파일로 생성합니다.

2. Filter 인터페이스를 상속 받습니다

3. 일반적으로 doFilter메서드를 오버라이딩 합니다

4. 사용 후 doFilter(request, response); 메서드를 반드시 사용한다

 

 

필터의 사용방법

1. 어노테이션 방법

Ex) */board

체인필터01

//1. Filter인터페이스를 상속받고
//2. web.xml or 어노테이션 중 하나를 선택해서 필터로 등록
//@WebFilter("/*")//모든요청
public class ChainFilter01 implements Filter{


public void destroy() {

}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {

System.out.println("1번 필터 실행됨");

//다음으로 연결
chain.doFilter(request, response);

}

public void init (FilterConfig fiterConfig) throws ServletException {

}

체인필터02

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {

System.out.println("2번째 필터 실행됨");

chain.doFilter(request, response);
}

 

2. Web.xml에 선언

<!-- web.xml에 필터 등록 -->
<filter>
<filter-name>first</filter-name>
<filter-class>com.myweb.util.filter.ChainFilter01</filter-class>
</filter>

<filter-mapping>
<filter-name>first</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 필터 체이닝(단, 체이닝을 하려면 web.xml을 이용해야합니다) -->
<filter>
<filter-name>second</filter-name>
<filter-class>com.myweb.util.filter.ChainFilter02</filter-class>
</filter>

<filter-mapping>
<filter-name>second</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

</web-app>

============================

글작성은 세션 정보를 가지고있으면 가능(필터등록)

//1. 글작성(세션정보를 가지고있는 가용자만 적용되는 필터)
@WebFilter({"/board/write.board","/board/regist.board"})
public class BoardFilter01 implements Filter{

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {

//세션정보를 얻어서 확인
//부모를 자식으로 캐스팅
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;

HttpSession session = req.getSession();
UsersVO vo = (UsersVO)session.getAttribute("userVO"); //회원측에서 만든 userVO타입으로 캐스팅

if(vo == null) {//로그인이 만료된 회원

// res.sendRedirect("/MyWeb/user/login.jsp");

//out객체
res.setContentType("text/html; charset=UTF-8;");//응답내용에 관한 설정

PrintWriter out = res.getWriter();
out.println("<script>");
out.println("alert('로그인이 필요한 서비스입니다');");
out.println("location.href='/MyWeb/user/login.jsp';");
out.println("</script>");


return; //컨트롤러를 실행하지 않는다
}

chain.doFilter(request, response); //다음 필터 or 컨트롤러의 연결
}

}

==========================

글수정,삭제는 작성자만이 가능(필터등록)

 1.등록화면에서 작성자를 id값으로 고정.

boardwriter.jsp 

<td>작성자</td>
<td>
<input type="text" name="writer" value="${sessionScope.userVO.id}" size="10" readonly required>
</td>

밸류값을 넣고 읽기 전용 태그를 넣어 작성자 고정을해줌

=====

2.각각 요청에서 writer값이 반드시 담겨 넘어오도록 처리

boardcontent.jsp

<input type="button" value="수정" onclick="location.href='modify.board?bno=${vo.bno}&writer=${vo.writer}'">&nbsp;&nbsp;
<input type="button" value="삭제" onclick="location.href='delete.board?bno=${vo.bno}&writer=${vo.writer}'">&nbsp;&nbsp

수정,삭제 버튼에 writer값이 넘어오도록 & (값)을 넣어줌

=====

3.세션 id와 writer의 비교

//글 수정, 삭제에 대한 필터
@WebFilter({"/board/modify.board","/board/update.board","/board/delete.board"})
public class BoardFilter02 implements Filter{

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;

request.setCharacterEncoding("utf-8"); //한글처리
/*
 * 1.등록화면에서 작성자를 id값으로 고정.
 * 2.각각 요청에서 writer값이 반드시 담겨 넘어오도록 처리
 * 3.세션 id와 writer의 비교
 */

//세션
HttpSession session = req.getSession();
UsersVO vo = (UsersVO)session.getAttribute("userVO");

if(vo == null) {//세션이 없는경우
res.sendRedirect("/MyWeb/user/loginn.jsp");
return; //컨트롤러를 실행하지 않는다.
}

//화면에서 넘어오는 writer
String writer = req.getParameter("writer"); //작성자
//세션에서 id를 확인
String id = vo.getId();

if(writer == null || !id.equals(writer)) {//작성자가 아닌경우

res.setContentType("text/html; charset=UTF-8;");//응답내용에 관한 설정

PrintWriter out = res.getWriter();
out.println("<script>");
out.println("alert('권한이 없습니다');");
out.println("location.href='/MyWeb/board/list.board';");
out.println("</script>");
return; //컨트롤러를 실행하지 않음
}

chain.doFilter(request, response);
}

}

 

===============================================

로그인을 하지않을경우(세션값이 없으면) 글 작성버튼 비활성화

board_list.jsp에서 수정

<c:if test="${sessionScope.userVO != null}">
<input type="button" value="글 작성" class="btn btn-default" onclick="location.href='write.board' ">
</c:if>

위 부분만 수정해주면된다

 

=================================================

깃허브란?

-깃(git)은 공통으로 관리는 프로그램 소스코드 관리하기 위한 플랫폼 입니다.

-GitHub를 통해 사람들이 어디서나 프로젝트를 함께 할 수 있습니다

버전별로 유 의미한 변화를 중심으로 백업해 주는 과정이 필요하다

 

=================================

깃(git) 다운로드

구글 검색 깃 - 깃 홈페이지 - 다운로드 탭 - Standalone Installer 윈도우 64비트 다운로드 -  다음버튼 연타 후 설치 종료

 

깃 실행

실행할 곳에서 마우스 오른쪽 클릭 - git bash here

===============================

깃 설치 후 최초 설정

사용자 정보 설정 Git은 커밋 할 때마다, 현재 운영체제에 설정 된 아래 정보를 사용한다.

혼자 사용하는 컴퓨터라면, 한번만 선언하면 되지만, 매번 다른 환경이라면 사용자 정보를 설정한다.

 

 

 

 

 

작업공간(폴더)

 

===========================

깃 명령문

모든 깃 명령어는 시작 되기 전에 해당 폴더안에서 버전관리를 시작해야 한다!

 

git init :깃 시작

git status :현재 깃의 상태

git add 파일명 :해당 파일을 staging area에 추가

git rm --cached 파일명 :해당 파일을 staging area에 삭제

git add . :파일을 전부다 추가

git commit –m “메시지” :깃을 레파지토리에 저장                파일의 수정이 일어난다면 add부터 다시 진행

git log :커밋 이후 변경 로그를 확인

git restore --staged "파일명" : 필요없는 파일을 추가했다면 되돌리기

 

여기 까지가 내 컴퓨터의 로컬저장소에 저장하는 명령어 이다

 

git commit –am “메시지” : 추가와 커밋 을 동시에 한다

 

깃을 원격저장소에 올리는 작업

git remote add origin 본인의깃계정 :원격저장소를 추가한다

git push origin master :원격저장소에 저장한다