밀김 2023. 6. 12. 15:47
728x90

 

 

 

 

 

 

 

 

 

 

- 로그인은 리디렉션을 사용한다 (클라이언트와의 상호작용)

 

 

- 컨트롤러 : 입출력 / 서비스: 업무

 

 

- post는 접수만 하고 view를 절대 주면 안된다! 안내창구같은 역할임

 

 

 

- 파람에서 오는 에러가 null값이 아니면 저 오류 메세지가 뜨게 하는것

<div th:if="${param.error}" class="mt-3 d-flex align-items-center ">
			  아이디 또는 비밀번호가 일치하지 않습니다.
		  </div>

 

 

 

 

 

 

- 패스워드 검증

	public boolean isValid(String username, String pwd) {
		Member member = repository.findByUsername(username);
		
		if(member==null)
			return false;
		else if(!member.getPwd().equals(pwd))
			return false;
		
		return false;
	}

 

 

 

 

 

- 인증받고 다시 돌아올 url을 지정해줘야 한다 post때문에 로그인하고 새로운 페이지로 안내받으면 안됨

이걸 뷰단에서 전달할때 같이 전달해준다

  if(session.getAttribute("username")==null)
   		  return "redirect:/sign-in?returnURL=/member/index";

 

 

 

 

- 이런식으로 html에서 리턴 url을 지정해준다 

(input thype="hidden" 입력하지 않은 값을 넘기는 숨겨진 양식)

<input type="hidden" name="returnURL" value="${param.returnURL}" />

위 코드 친구 설명 ㅋㅋㅋㅋㅋ

 

 

 

 

 

인자넣어줘야함

 

 

 

 

 

 

	   if(!returnURL.equals(""))
		   return "redirect:"+returnURL;
	   else
		   return "redirect:/index";

 

 

 

 

 

- return url의 목적은 그냥 리턴..이다?

 

 

- 쿼리는 get 요청만 받음

 

 

 

 

 

 

 

 

 

 

- 권한확인하는애 : 필터

 

 

 

 

- 필터걸어서 못 접근하게 하는 방법

@Component
public class SecurityFilter implements Filter{

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
			
			System.out.println("너 입뺀");
		
	}

 

 

 

 

- 필터는 여러개 있어도 됨 하지만,먼저 로드된 필터가 이겨버림!!

 

 

- 필터의 허락을 안받으면 이미지도 못나옴

 

 

 

인증필터

 

 

 

 

//@Component
public class TestFilter implements Filter{
	private static String[] authenURLs = {"/member/*","/admin/*"};
	
	
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		
	        HttpServletRequest httpRequest = (HttpServletRequest) request;
	        httpRequest.getRequestURI(); // /member/index

			System.out.println("응 안돼~~");
			
			chain.doFilter(request, response);
		
	}

}

 

 

 

 

 

우리는 2번을 쓸거다

 

 

 

 

 

	@Bean
	public PasswordEncoder passwordEncoder() {
		return new BCryptPasswordEncoder();
	}
	//콩자루에 담는 과정

 

 

 

 

 

- 인증을 하기 위한 설정 과정..

@Configuration
public class RlandConfig {
// 인증과 권한에 사용되는 객체를 생성해서 <콩자루에 담는> 코드를 작성한다
   @Autowired
   private PasswordEncoder passwordEncoder;

// 권한을 위한 필터 객체
   //@Bean
   public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
      
      return http.build();
      //반환타입: 디폴트 보안 필터 체인
   }

   
   // 사용자 정보를 위한 서비스 객체
   //1. 인메모리 사용자 정보 
   @Bean
   public PasswordEncoder passwordEncoder() {
      return new BCryptPasswordEncoder();
   }
   @Bean
   public UserDetailsService userDetailsService() {
      
      UserDetails newlec = User.builder()
                                                   .username("newlec")
                                                   .password(passwordEncoder().encode("111"))
                                                   .roles("ADMIN","MEMBER")
                                                   .build();
      return new InMemoryUserDetailsManager(newlec);
   }
   //2. JDBC를 이용한 사용자 정보 
   //3. 디렉토리 서비스를 이용한 사용자 정보 
}

 

 

 

 

 

 

 

728x90