본문 바로가기
spring

SPRING HATEOAS/Security == Intercepter

by improve 2024. 3. 15.

maven 의존성 추가해준다 .

Hateoas(해당되는 주소를 웹에서 보여준다.)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>

 

 

●UserController

 


@PostMapping()
public EntityModel<User> addUser (@RequestBody @Valid UserDto userDto){

    userDto.setWdate(LocalDateTime.now());
    ModelMapper modelMapper = new ModelMapper();
    User user = modelMapper.map(userDto,User.class);

    User dbuser = userService.regist(user);

    EntityModel<User> entityModel = EntityModel.of(dbuser);
    entityModel.add(
            WebMvcLinkBuilder.linkTo(UserController.class)
                    .slash(dbuser.getId())
                    .withSelfRel()
    );
    return entityModel;
}

EntityModel 로 만들어준다.

 

이러면 POST 방식으로 아디를 만들어주면 그 주소를 같이 나오게 된다.

 

 

사진 처럼 주소가 나오게 된다.

 

 

 

intercepter 와 기능은 똑같다.

일반 회원인지 주인인지 로그인을 했을 때 수정권한이 다르다.

그걸 해보겠다.

Security maven 의존성 추가

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

 

Security 는 모든 연결을 우선 막고 아이디와 비번을 쳤을 때 풀린다 .

 

우선 intercepter 로 해보겠다.(쓰는이유는 로그인을 했을 때 다른 사람의 정보를 보여서는 안되고, 해당되는 이메일과 비밀번호가 없을때는 로그인이 되면안되기 때문이다.)

 

 

package 형식은 이렇게 만들었습니다.

 

●LoginIntercepter

package com.mh.restapi03.login;

import com.mh.restapi03.exception.ErrorCode;
import com.mh.restapi03.exception.UserException;
import com.mh.restapi03.users.User;
import com.mh.restapi03.users.UserRepository;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

@Component
@RequiredArgsConstructor
public class LoginIntercepter implements HandlerInterceptor {

    private final UserRepository userRepository;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("일로오나");
        String password = request.getHeader("password");
        String email = request.getHeader("email");

        System.out.println(password);
        System.out.println(email);

        User dbUser = userRepository.findByEmailAndPassword(email,password);
        if (dbUser == null){
            throw new UserException(ErrorCode.LOGFAIL);
        }
        return true;
    }
}

 

오버로딩으로 password와 email을 얻어온다.

 

email,password를 dbuser 에 담아서 

공간이 널 이면 

오류문을 출력해라 

 

 

●CorsInterceptorConfig

package com.mh.restapi03.conf;

import com.mh.restapi03.login.LoginIntercepter;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@RequiredArgsConstructor
public class CorsInterceptorConfig implements WebMvcConfigurer {

    private final LoginIntercepter loginIntercepter;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(loginIntercepter)
                .excludePathPatterns("/join","/login")
                .addPathPatterns("/**");
    }
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedHeaders("*")
                .allowedMethods("*");
    }
}

 

오버로딩으로 addIntercepter 만들어준다.

 

excludePathPatterns 에 join와 login은 예외로 평소처럼 다 보이게 한다.

모든 클래스를 담아라 

 

'spring' 카테고리의 다른 글

tosspayment api 사용해보기  (0) 2024.04.18
맥북에서 DBeaver spring 으로 연결  (0) 2024.03.01
spring pom.xml  (0) 2024.02.28
spring 등록 출력(복습)  (0) 2024.02.27
spring 으로 게시판  (0) 2024.02.23