π₯ λ§μ΄λ°ν°μ€, μΈν°μ ν°, λΉμ€μ½ν 10κ° ~ 13κ°
1οΈβ£ μΈν°μ ν° λμ (μ€νλ§ μν리ν°λ₯Ό λμ νλ μν μν)
β‘οΈ Controller μ λ¨μμ μλνλ€λ μ μμ μ€νλ§ μν리ν°μ μ μ¬νμ§λ§ 보μμ μ§μ€λ μν리ν°μ λ¬λ¦¬ λ²μ©μ μΌλ‘ μ°μΈλ€. μΌμ’ μ νν° μν μ νλ€κ³ μκ°νλ©΄ λλ€. (보μ, λ λλ§ λ±)
β‘οΈ ex) μνμμμ μ²μκ²½μ°° κ°μ μν λ‘ λ³΅λ©΄μ μ΄ κ°λλΌλ©΄ μνμ(= Controller) μ΄ μ 무λ₯Ό 보기 μ μ μ κ°λ₯νλ―λ‘ μνμμκ² μ΄ λΆλΆμ λν λ©λ΄μΌμ΄ μμ΄λ λ¨.
[μΈν°μ ν° 1]&[μΈν°μ ν° 2]& ... [μΈν°μ ν° N] β‘οΈ Controller β‘οΈ Service β‘οΈ Repository
β μΈν°μ ν° μμ±

@Component
@Slf4j // ν΄λΉ κΈ°λ₯μ μ¬μ©νκΈ° μν΄μλ yml νμΌμ logging μ λν μΆκ° μ€μ νμ
public class BeforeActionInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.debug("BeforeActionInterceptor:::preHandle μ€νλ¨");
return HandlerInterceptor.super.preHandle(request, response, handler);
}
}
π€ @Component μ μν
κ°λ°μκ° μ§μ μμ±ν Class λ₯Ό μ±κΈν€ ν΄λμ€ λΉμΌλ‘ μμ±νλ μ΄λ Έν μ΄μ μΌλ‘ ν΄λΉ Class κ° μ€νλ§μ ꡬμ±μμμμ λ§ν΄μ£ΌκΈ° μν λͺ©μ μ΄λ€. μ¬κΈ°μ λ μΈλΆμ μΌλ‘ μν μ μ μνλ©΄ @Controller, @Service λ±μΌλ‘ νμλλ€.
β cf) @Slf4j λ₯Ό μν yml μΆκ° μ€μ
logging:
level:
com.ay.study.mybatis_1101: debug
β‘ μΈν°μ ν° μλ μ€μ
λ°©λ² (1) : ν΄λΉ νμΌμμ λͺ¨λ λ΄μ© μΆκ°
@Configuration
@RequiredArgsConstructor
public class WebMvcConfig implements WebMvcConfigurer {
private final BeforeActionInterceptor beforeActionInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
InterceptorRegistration ir;
ir = registry.addInterceptor(beforeActionInterceptor);
// interceptor μλ κΈ°μ€ μΆκ°
ir.addPathPatterns("/**");
// μμΈ κ²½μ°λ€
ir.excludePathPatterns("/favicon.ico");
ir.excludePathPatterns("/resource/**");
ir.excludePathPatterns("/gen/**");
ir.excludePathPatterns("/error");
}
}
λ°©λ² (2) : applicaiton.yml νμΌ νμ©
- yml νμΌμ λ³μ μμ±
# interceptor notLoadLIst
resources:
notload:
list: /favicon.ico, /resource/**, /gen/**, /error
// (μλ΅)
import org.springframework.beans.factory.annotation.Value; // lombok μ Value κ° μλ
@Configuration
@RequiredArgsConstructor
public class WebMvcConfig implements WebMvcConfigurer {
private final BeforeActionInterceptor beforeActionInterceptor;
@Value("${resources.notload.list}") // application.ymlμ μ€μ λ κ°μ κ°μ§κ³ μ€κΈ°
private List<String> notLoadList;
@Override
public void addInterceptors(InterceptorRegistry registry) {
InterceptorRegistration ir;
ir = registry.addInterceptor(beforeActionInterceptor);
// λ°©λ²(2) : yml νμΌ νμ©
notLoadList.add("/article/test"); // μμΈ κ²½λ‘ μΆκ°
ir.addPathPatterns("/**").excludePathPatterns(notLoadList);
}
}
β‘οΈ κ°λ μ±μ΄ μ’μμ‘λ€.
β’ μλ νμΈ

yml νμΌμμ μ€μ ν κ²½λ‘λ€κ³Ό notLoadList μ μΆκ°ν "/article/test" κ²½λ‘μμλ λ°μνμ§ μκ³ , κ·Έ μΈμ κ²½λ‘λ€μμλ λ°μνλ€.
2οΈβ£ μΈν°μ ν°λ₯Ό νμ©ν΄μ μ€νλ§ μν리ν°μ μ μ¬ν μν μννλλ‘
β Member ν μ΄λΈ λ° DTO μμ±
β‘ Controller, Service λ° Repository μμ±
- Controller
@Controller
@RequiredArgsConstructor
@RequestMapping("/member")
public class MemberController {
private final MemberService memberService;
@GetMapping("/login")
public String showLogin() {
return "member/login";
}
@PostMapping("/login")
public String login(String username, String password, HttpSession session ) {
Member member = memberService.getMemberByUsername(username);
if (member == null) {
return "redirect:/?msg=NotFoundMember";
}
if (!member.matchPassword(password)) {
return "redirect:/?msg=passwordError";
}
// login κ΄λ ¨ μΈν°μ
ν°μκ² λ‘κ·ΈμΈ μ 보λ₯Ό μ λ¬
// λ¨μν logined μ T/F λ₯Ό 보λ΄λ©΄ λ‘κ·ΈμΈν μ μ κ° λκ΅°μ§ μ μ μμ
session.setAttribute("loginedMemberId", member.getId());
return "redirect:/?msg=loginSuccess";
}
}
- (Service μλ΅)
- Repository
@Mapper
public interface MemberRepository {
@Select("""
SELECT *
FROM member
WHERE username = #{username}
""")
Member getMemberByUserName(String username);
}
β’ μΈν°μ ν° μμ± λ° μ€μ
@Configuration
@Slf4j
public class NeedToLoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.debug("NeedToLoginInterceptor::preHandle μ€νλ¨");
// Session νμ©
HttpSession session = request.getSession();
Long loginedMemberId = (Long) session.getAttribute("loginedMemberId");
boolean isLogined = loginedMemberId != null;
if(!isLogined) {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
response.getWriter().append("λ‘κ·ΈμΈ ν μ΄μ©λ°λλλ€.");
return false; // Controller μ§μ
λͺ»ν΄λ³΄κ³ μ’
λ£λ¨
}
return HandlerInterceptor.super.preHandle(request, response, handler);
}
}
@Configuration
@RequiredArgsConstructor
public class WebMvcConfig implements WebMvcConfigurer {
// (μλ΅)
private final NeedToLoginInterceptor needToLoginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// (μλ΅)
ir = registry.addInterceptor(needToLoginInterceptor);
ir.addPathPatterns("/article/write");
}
}
β£ κ²°κ³Ό νμΈ


π¦ νλ‘κ·Έλλ¨Έμ€ Java λ¬Έμ νμ΄
λ°λ‘ μ 리 : https://like099.tistory.com/80
[Programmers] Level 2 Java λ¬Έμ νμ΄ (1)
1οΈβ£ μ΅λκ°κ³Ό μ΅μκ° (https://school.programmers.co.kr/learn/courses/30/lessons/12939) β String λ°°μ΄μ int λ°°μ΄λ‘ : Arrays.stream(String[]) String[] strList = {"-1", "4", "5", "-4", "0"}; int[] numList = Arrays.stream(strList) .mapToInt(I
like099.tistory.com
'TIL π' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| TIL 22μΌμ°¨ (2022.12.03) (1) | 2022.12.03 |
|---|---|
| TIL 21μΌμ°¨ (2022.11.08) (0) | 2022.11.08 |
| TIL 19μΌμ°¨ (2022.11.04) (0) | 2022.11.04 |
| TIL 18μΌμ°¨ (2022.11.03) (0) | 2022.11.03 |
| TIL 17μΌμ°¨ (2022.11.01) (0) | 2022.11.01 |