Enum 이란 ? (열거형 클래스)
미리 정의된 상수들의 특별한 집합
enum (enumeration number) : 즉 상수들을 열거한 것이 enum이다.
enum에 열거된 상수들은 추가적인 객체 생성 없이 외부에서 사용이 가능하다.
그리고 상수들 앞에 아무런 자료형이 붙지 않지만 기본적으로 public static final 이다.
기본적으로 final 인 상수이기 때문에 모두 대문자로 적는것을 원칙으로 한다.
사용이유 :
- 가독성증가. 코드가 단순해진다.
- 컴파일 시 데이터 타입 및 유효성 체크를 할 수 있다.
- 허용 가능한 값 제한가능
- 수정 시 변경 범위가 최소화 된다.
사용 함수
ordinal : 열개 객체의 순번(0부터 시작)을 리턴
name() : 열거 객체의 문자열을 리턴
values() : 모든 열거 객체들을 배열로 리턴
valueOf(String name) : 문자열을 입력받아 일치하는 열거 객체를 리턴
public class PermissionFilter implements Filter
{
Map<String,ROLE> pageGradeMap = new HashMap(); // URL : Permission Value
// /user.do : 0
// /member.do : 1
// /admin.do : 2
@Override
public void init(FilterConfig filterConfig) throws ServletException {
String projectPath = filterConfig.getServletContext().getContextPath();
pageGradeMap.put(projectPath+"/book/add",ROLE.ROLE_MEMBER); //1
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//
System.out.println("[Filter] PermissionFilter..Start");
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
HttpSession session = req.getSession();
String myRole = (String)session.getAttribute("role");
if(myRole==null) {
resp.sendRedirect(req.getContextPath()+"/login?message=" + URLEncoder.encode("로그인이 필요한 서비스입니다","UTF-8"));
return ;
}
//role값 존재하는 경우
String url = req.getRequestURI(); // /PJ/user.do , /PJ/member.do , /PJ/admin.do , etc..
ROLE pageRole = pageGradeMap.get(url);
System.out.println("URL : " + url + " pageRole : " + pageRole+ " myRole : " + myRole);
ROLE myRoleVal =null;
if("ROLE_ADMIN".equals(myRole)) {
myRoleVal = ROLE.ROLE_ADMIN;
}else if("ROLE_MEMBER".equals(myRole)) {
myRoleVal = ROLE.ROLE_MEMBER;
}else if("ROLE_USER".equals(myRole)){
myRoleVal = ROLE.ROLE_USER;
}else {
;
}
//pageRole<=myRole -> 허용
if(pageRole.ordinal() > myRoleVal.ordinal()) {
//pageRole>myRole -> 권한부족(예외페이지로 이동 - Forward / Redirect error.jsp)
//throw new ServletException("해당 권한으로는 접근이 불가능한 페이지 입니다.");
resp.sendRedirect(req.getContextPath()+"/error.jsp?message=" + URLEncoder.encode("페이지에 해당 계정 권한이 부족합니다.","UTF-8"));
return ;
}
chain.doFilter(request, response);
//
System.out.println("[Filter] PermissionFilter..End");
}
}
enum을 사용한 filter 에서 회원등급 구별.
session에서 role이라는 세션값을 얻은후에 role이 비어있다면 로그인 페이지로 리다이렉팅 되게하고,
String url = req.getRequestURI();
ROLE pageRole = pageGradeMap.get(url);
여기서 getRequestURI 는 요청 URL 을 가져옴.
ex) Myapp/book/add
위에서 pageGradeMap 에 book/add 주소에 ROLE_MEMBER 를 할당해놓아서 이 주소를 요청할 시에는 최소 ROLE_MEMBER 이상이어야 접근이 가능하게 해놓음. 그리고 권한을 비교해서 변수에 권한이 담긴 값을 담아서 특정 회원의 role이 ROLE_MEMBER 보다 높은지 검사. 높다면 다음 페이지로 요청을 넘기고 , 권한이 낮다면 에러페이지와 권한이 부족하다는 메시지를 함께 출력해준다.
파일 입출력
@Override
public void execute(HttpServletRequest req, HttpServletResponse resp) {
System.out.println("GET /profile/image");
String username = req.getParameter("username");
String path = UploadProperties.uploadPath
+ File.separator
+ UploadProperties.profilePath
+ File.separator
+ username
+ File.separator;
File file = new File(path + "profileImg.jpg"); //파일 객체 생성
String mimeType = "application/octet-stream"; //MIME 타입
//바이너리 데이터를 전송할 때 사용된다
resp.setContentType(mimeType); //Content-Type 을 설정한다
resp.setContentLengthLong(file.length()); //파일의 길이를 설정하여 전송한다
//스트림전송
try {
FileInputStream fin = new FileInputStream(file); //파일 읽기 스트림
ServletOutputStream sout = resp.getOutputStream(); //응답 출력 스트림
byte [] buff = new byte[1024]; //버퍼 크기 설정
while(true) {
int cnt = fin.read(buff); //버퍼에 파일 데이터 읽기
if(cnt==-1) //EOF(파일 끝) 체크 , 다 읽어서 0이하 값이 나오면 종료
break;
sout.write(buff,0,cnt); //클라이언트에 데이터 전송
sout.flush();
}
MIME 타입이란 ?
웹을 통해서 여러 형태의 파일을 전달하는데 사용된다. 파일 변환을 뜻함
쿼리스트링의 형식
쿼리스트링이란 사용자가 입력 데이터를 전달하는 방법중의 하나로 url 주소에 미리 협의된 데이터를 파라미터를 통해 넘기는 것.
- 엔드포인트 주소 이후에 ? 를 써서 쿼리스트링의 시작을 알린다.
- parameter =value 형식으로 필요한 파라미터 값을 적는다.
- = 으로 key 와 value를 구분함.
- 파라미터가 여러개일 경우에는 & 를 붙여 여러 파라미터를 넘길 수 있다.
'Developer Note > 국비과정 수업내용 정리&저장' 카테고리의 다른 글
24년 11월 11일 (1) | 2024.11.21 |
---|---|
24년 11월 08일 (2) | 2024.11.21 |
24년 11월 7일 (0) | 2024.11.19 |
24년 11월 5일 (0) | 2024.11.11 |
24년 11월 4일 (4) | 2024.11.06 |