Spring Boot에서 jsp로 화면을 만들고 Controller에서 View로 리턴을 하였는데 jsp 파일을 찾지 못하는 경우 ResourceHttpRequestHandler :Path with "WEB-INF" or "META-INF" 이런 식으로 발생하는 오류입니다브라우저에는 아래와 같은 오류가 발생 하고


spring boot jasper


Console에도 아래 처럼 오류 로그를 확인할 수 있습니다


spring boot jasper


spring boot jasper


2020-02-14 11:54:00.941  INFO 33124 --- [nio-9090-exec-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...

2020-02-14 11:54:01.089  INFO 33124 --- [nio-9090-exec-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.

2020-02-14 11:54:01.151  WARN 33124 --- [nio-9090-exec-1] o.s.w.s.r.ResourceHttpRequestHandler     : Path with "WEB-INF" or "META-INF": [WEB-INF/jsp/board/BoardList.jsp]

2020-02-14 11:54:05.743  WARN 33124 --- [nio-9090-exec-2] o.s.w.s.r.ResourceHttpRequestHandler     : Path with "WEB-INF" or "META-INF": [WEB-INF/jsp/welcome.jsp]


사실 오류라기 보다는 Spring Boot에서 내장된 Tomcat을 사용 하는 경우 JSP를 처리하는 서블릿을 추가하지 않아 발생하는 것으로 pom.xml에 다음을 추가해 주면 해결 됩니다.


 <dependency>

        <groupId>org.apache.tomcat.embed</groupId>

        <artifactId>tomcat-embed-jasper</artifactId>

</dependency>


pom.xml에 추가하고  Maven update 하고 Maveninstall 하고 실행해 보면 이번에는 화면에 출력이 잘 나옵니다.



Spring Security에서의 권한 별 접근은 아래 source 처럼 대부분 configure(HttpSecurity http)에 설정을 하여 관리를 하게 됩니다.


   @Override

   protected void configure(HttpSecurity http) throws Exception {

      http.httpBasic().and().authorizeRequests()

        .antMatchers("/").permitAll()

        .antMatchers("/page2").hasRole("ADMIN")

        .antMatchers("/page1").hasRole("USER")

        .anyRequest().authenticated()

        .and().logout().permitAll()

        .and().formLogin()

        .and().csrf().disable();

  }


다른 방법을 찾아보면 Controllerannotation을 추가하여 관리하는 방법도 있는데 이것이 @PreAuthorize, @PostAuthorize, @Secured 입니다사용 방법도 너무나 간단한데 권한 설정이 필요한 위치에 @PreAuthorize("hasRole('ROLE_ADMIN')") 이런식으로 어노테이션을 추가해 주면 권한 별로 접근을 통제 하게 됩니다예를 들자면...


    @PreAuthorize("hasRole('ROLE_ADMIN')")

    @RequestMapping("/preRole1")

    public @ResponseBody String preRole1() throws Exception {

              

           return "@PreAuthorize : get role ROLE_ADMIN";

    }


위에있는 예제처럼 추가를 하였는데 아무런 작동을 하지 않는다면 @PreAuthorize @Secured의 사용은 처음에는 비활성화 되어 있어서 사용 하려면 설정을 해줘야 됩니다이것도 아주 간단 한데 Configure 클래스 파일 상단에 아래 코드를 추가해 주기만 하면 활성화 됩니다.

@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)



테스트


몇가지 예를 들어 간단하게 테스트를 해보겠습니다.

 

copycodingADMIN 권한이고 honggil이는 USER 권한을 가지도록 configure에 설정을 합니다.


 @Autowired

 public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

    auth.inMemoryAuthentication()

        .withUser("copycoding").password(passwordEncoder().encode("copycopy")).roles("ADMIN");

    auth.inMemoryAuthentication()

        .withUser("honggil").password(passwordEncoder().encode("hoho")).roles("USER");

 }


Method에는 annotation을 사용하여 각 권한 별로  접근 설정을 합니다.


 @PreAuthorize("hasRole('ROLE_ADMIN')")

 @RequestMapping("/preRole1")

 public @ResponseBody String preRole1() throws Exception {

              

              return "@PreAuthorize : get role ROLE_ADMIN";

 }

       

 @PreAuthorize("hasRole('ROLE_USER')")

 @RequestMapping("/preRole2")

 public @ResponseBody String preRole2() throws Exception {

              

               return "@PreAuthorize : get role ROLE_USER";

 }

       

 @Secured("ROLE_ADMIN")

 @RequestMapping("/secRole1")

 public @ResponseBody String secRole1() throws Exception {

              

               return "@Secured : get role ROLE_ADMIN";

 }

 

 @Secured("ROLE_USER")

 @RequestMapping("/secRole2")

 public @ResponseBody String secRole2() throws Exception {

              

               return "@Secured : get role ROLE_USER";

 }



@PreAuthorize 테스트


ADMIN 권한이 있는 copycoding으로 로그인을 진행 합니다.


Spring Security PreAuthorize Secured


로그인이 성공 하면 http://localhost:9090/preRole1 에 접속해 봅니다


Spring Security PreAuthorize Secured


접근 권한이 있으니 접근을 할 수 있습니다.


그러면 이번엔 http://localhost:9090/preRole2 에 접속 합니다.


Spring Security PreAuthorize Secured


ADMIN만 접근 가능하니 USER 권한으로는 접근이 불가능 합니다


 

@Secured 테스트

 

USER 권한이 있는 honggil로 로그인을 하고 http://localhost:9090/secRole1 를 호출 합니다.


Spring Security PreAuthorize Secured


ADMIN만 접근 권한이 있으므로 접속이 차단 됩니다.

 

이번엔 http://localhost:9090/secRole2에 접속하면


Spring Security PreAuthorize Secured


USER 권한을 가지고 있어 접속이 가능 합니다.


configure를 이용하는 방법과 annotation을 이용하는 방법의 차이는 접근 권한을 한곳에서 관리 하느냐 여러곳에서 필요에 따라 관리하느냐 하는 관리적인 관점의 차이인데 프로젝트에 따라서 선택을 하던가 적절히 섞어서 사용 하던가 하면 될것 같습니다.

 

@PreAuthorize 와 쌍으로 @PostAuthorize 도 있습니다차이점은 @PreAuthorize 는 말 그대로 실행 전에 권한을 검사하는 거고 @PostAuthorize 는 실행 후 권한을 검사하는 건데 이것도 필요에 따라 선택을 하면 되겠죠.


전체 소스

WebSecurityConfigurerAdapter

package com.copycoding.security;

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;

import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;

import org.springframework.security.config.annotation.web.builders.HttpSecurity;

import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;

import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

import org.springframework.security.crypto.password.PasswordEncoder;

 

@Configuration

@EnableWebSecurity

@EnableGlobalMethodSecurity(securedEnabled=true, prePostEnabled=true)

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

 

        @Override

        protected void configure(HttpSecurity http) throws Exception {

               http.httpBasic().and().authorizeRequests()

        .antMatchers("/").permitAll()

        .antMatchers("/page2").hasRole("ADMIN")

        .antMatchers("/page1").hasRole("USER")

        .anyRequest().authenticated()

        .and().logout().permitAll()

        .and().formLogin()

        .and().csrf().disable();

        }

       

        @Autowired

        public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

               auth.inMemoryAuthentication()

                       .withUser("copycoding").password(passwordEncoder().encode("copycopy")).roles("ADMIN");

               auth.inMemoryAuthentication()

                       .withUser("honggil").password(passwordEncoder().encode("hoho")).roles("USER");

        }

       

        @Bean

    public PasswordEncoder passwordEncoder() {

        return new BCryptPasswordEncoder();

    }

} 


Controller

 package com.copycoding.security;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

 

import org.springframework.security.access.annotation.Secured;

import org.springframework.security.access.prepost.PreAuthorize;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.bind.annotation.RestController;

 

@RestController

public class TestController {

       

        @RequestMapping("/")

    public @ResponseBody String home() throws Exception {

 

               return "Spring Boot ";

        }

       

        @RequestMapping("/page1")

    public @ResponseBody String pageNo1(HttpSession session, HttpServletRequest request) throws Exception {

              

               System.out.println("pageNo1=========ROLE_ADMIN===========>" + request.isUserInRole("ROLE_ADMIN"));

               System.out.println("pageNo1=========ROLE_USER============>" + request.isUserInRole("ROLE_USER"));

 

               return "Spring Boot : Page No 1";

        }

       

        @RequestMapping("/page2")

    public @ResponseBody String pageNo2(HttpSession session, HttpServletRequest request) throws Exception {

              

               System.out.println("pageNo2=======ROLE_ADMIN=============>" + request.isUserInRole("ROLE_ADMIN"));

               System.out.println("pageNo1=======ROLE_USER==============>" + request.isUserInRole("ROLE_USER"));

              

               return "Spring Boot : Page No 2";

        }

       

        @PreAuthorize("hasRole('ROLE_ADMIN')")

        @RequestMapping("/preRole1")

    public @ResponseBody String preRole1() throws Exception {

              

               return "@PreAuthorize : get role ROLE_ADMIN";

        }

       

        @PreAuthorize("hasRole('ROLE_USER')")

        @RequestMapping("/preRole2")

    public @ResponseBody String preRole2() throws Exception {

              

               return "@PreAuthorize : get role ROLE_USER";

        }

       

        @Secured("ROLE_ADMIN")

        @RequestMapping("/secRole1")

    public @ResponseBody String secRole1() throws Exception {

              

               return "@Secured : get role ROLE_ADMIN";

        }

 

        @Secured("ROLE_USER")

        @RequestMapping("/secRole2")

    public @ResponseBody String secRole2() throws Exception {

              

               return "@Secured : get role ROLE_USER";

        }

}


- copy coding -


Spring Boot를 이용하여 security를 적용하는 방법을 연습해 봅니다.

먼저 프로젝트를 생성해야 테스트를 진행 하겠죠.


spring boot security


상단 메뉴에서 File > New > Spring Starter Project를 이용하여 프로젝트를 생성해도 됩니다.


spring boot security


프로젝트 정보는 테스트용이라 대충 적었습니다.


spring boot security


필요한 라이브러리는 Spring Security만 설명할거기 때문에 복잡하지 않도록 Spring SecuritySpring Web만 선택 했습니다그리고 Finish 버튼을 클릭 하면 자동으로 필요한 라이브러리를 추가하고 기본 소스를 생성 합니다.

 

자동으로 생성된 프로젝트를 실행 해 볼까요?


spring boot security


Spring Boot App을 선택해서 실행을 합니다.


spring boot security


로그인 화면이 나오는데 IDsecurity에서 제공하는 초기값이 user 이고 비밀 번호는 Console 창에 출력을 해줍니다.


spring boot security


이렇게 console 창에 비밀번호가 나타납니다.  복사해서 비밀번호 입력을 하고  Sign in 버튼을 클릭하면 로그인이 진행 됩니다.


spring boot security


오류 메시지가 나오는군요그럼 로그인 성공 입니다.

가야할 페이지가 없어서 나오는 오류 입니다.  프로젝트만 생성하고 화면 작업을 하나도 안했죠.


그럼 갈곳을 정해주고 다시 해봅니다.

Controller 파일을 하나 생성하고


package com.copycoding.security;


import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.bind.annotation.RestController;


@RestController

public class TestController {

@RequestMapping("/")

    public @ResponseBody String home() throws Exception {

return "Spring Boot";

}



@RestController 어노테이션을 사용합니다화면 만들기 귀찮아 텍스트를 바로 화면으로 출력하도록 했습니다. 홈페이지에 가려고 하는 경우 Spring Boot를 출력하도록 했습니다. 이러면 로그인 하고 여기로 오겠죠.

다시 프로젝트를 실행하고 로그인을 해봅니다.


spring boot security


로그인 성공입니다.

 

이번에는 페이지를 여러개 만들어서 테스트 합니다.

 

package com.copycoding.security;

 

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.bind.annotation.RestController;

 

@RestController

public class TestController {

       

        @RequestMapping("/")

    public @ResponseBody String home() throws Exception {

 

               return "Spring Boot ";

        }

       

        @RequestMapping("/page1")

    public @ResponseBody String pageNo1() throws Exception {

              

               return "Spring Boot : Page No 1";

        }

       

        @RequestMapping("/page2")

    public @ResponseBody String pageNo2() throws Exception {

              

               return "Spring Boot : Page No 2";

        }

}

 

프로젝트를 실행해서 로그인 하고 각 페이지에 접근해 봅니다.


spring boot security


spring boot security


또 성공입니다로그인만 되면 아무 페이지나 막 갈 수 있습니다이러려고 Spring Security를 사용하는게 아니죠?


이번엔 갈 수 있는 페이지와 없는 페이지를 한정해 봅니다그러려면 class 파일을 하나 만들어야 합니다파일에 Security Config를 설정해서 테스트를 진행 합니다.

클래스를 하나 생성 하는데 상속을 받아서 생성을 해야 합니다.


spring boot security


바로 WebSecurityConfigurerAdapter를 찾아서 상속 관계를 만들어 줍니다생성하는 파일명은 편하게 만들면 되고 파일이 만들어 지면 상속된 클래스로 부터 Method 리스트를 찾아 추가해야 합니다.


spring boot security


Method 중에 configure(HttpSecurity http)를 선택하여 추가해 줍니다.  찾기 귀찮으면 그냥 직접 입력 해서 사용 합니다.


 package com.copycoding.security;


import org.springframework.context.annotation.Configuration;

import org.springframework.security.config.annotation.web.builders.HttpSecurity;

import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;

import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;


@Configuration

@EnableWebSecurity

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {


@Override

protected void configure(HttpSecurity http) throws Exception {

http.authorizeRequests()

        .antMatchers("/").permitAll()

        .antMatchers("/page2").hasRole("ADMIN")

        .antMatchers("/page1").hasRole("USER")

        .anyRequest().authenticated();

}

}


Method가 추가 되면 페이지별 권한을 설정 합니다.

“/”는 로그인 하면 접근이 가능하고 다른 페이지 “page1”, “page2”는 아래와 같이 접속 하려면 오류가 발생 합니다.


spring boot security


잠시 Postman으로 설명을 하면


spring boot security


“/”는 접근이 가능 하지만


spring boot security


이렇게 “/page1”, “/page2”ADMIN USER 권한이 있어야 접속이 가능하므로 “Access Denied” 오류가 발생 합니다.

 

이제 ADMIN USER 권한이 있는 로그인 정보를 source에 추가해서 테스트 해보겠습니다.


 package com.copycoding.security;


import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;

import org.springframework.security.config.annotation.web.builders.HttpSecurity;

import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;

import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

import org.springframework.security.crypto.password.PasswordEncoder;


@Configuration

@EnableWebSecurity

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {


@Override

protected void configure(HttpSecurity http) throws Exception {

http.httpBasic().and().authorizeRequests()

        .antMatchers("/").permitAll()

        .antMatchers("/page2").hasRole("ADMIN")

        .antMatchers("/page1").hasRole("USER")

        .anyRequest().authenticated()

        .and().logout().permitAll()

        .and().formLogin()

        .and().csrf().disable();

}

@Autowired

public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

auth.inMemoryAuthentication()

.withUser("copycoding").password(passwordEncoder().encode("copycopy")).roles("ADMIN");

auth.inMemoryAuthentication()

.withUser("honggil").password(passwordEncoder().encode("hoho")).roles("USER");

}

@Bean

    public PasswordEncoder passwordEncoder() {

        return new BCryptPasswordEncoder();

    }

}


“/”는 아무나 접근 가능 합니다.

“/page2”“ADMIN” 권한이 있어야 하는데 아래에 id/pw“copycoding”, ”copycopy” 이고

“/page1” “USER” 권한으로 로그인 정보가 “honggil”, “hoho” 이면 된다고 했습니다.

Postman으로 id password를 전송해서 테스트를 해 봅니다.


spring boot security


ADMIN 권한으로 로그인이 되어서 “/page2”에 잘 접속이 됩니다.


spring boot security


ADMIN 권한으로는 “/page1” 접근은 어림 없군요.

 

logout을 하고 honggil로 로그인 하면 반대의 결과가 나옵니다.

결과는 생략 하겠습니다.

 

logout“.and().logout().permitAll()” 이렇게 설정을 해놓았으므로 사용이 가능하고 사용하는 방법은 다음처럼 http://localhost:9090/logout 을 입력 하면 됩니다.


spring boot security


회원 로그인과 권한을 메모리에 넣고 사용하는 방법으로 테스트를 했는데 이걸 Database에 넣어서 관리하면 되겠네요.  그건 다음에 시간이 되면 테스트 해보겠습니다.


- copy coding -


녹아내린 눈 가운데 잔설을 보는 꿈 해몽

 -> 잘되어 가던 일의 마무리가 잘 되지 않아서 고생하며 손실이 생긴다.


눈 속에서 꽃이 피는 것을 보는 꿈 해몽

 -> 다른 사람에게서 축하받을 일이 생기거나, 이성교제가 원만하게 이루어지며, 재산과 명성 등이 풍족해져서 아주 일신이 편안하게 될 좋은 꿈이다.


눈 속에서 아이들이 노는 것을 보는 꿈 해몽

 -> 현재 진행하고 있는 일이 중도에 어려움이 있게 되며, 집안에 우환과 질병이 발생할 것이다.


눈 위에 있는 발자국을 따라가는 꿈 해몽

 -> 덕망있는 인물을 따르거나 그의 업적을 보존하는 사업에 참여하게 된다.


눈보라가 세차게 불고 앞이 어두운 꿈 해몽

 -> 좋지 않은 일을 당하거나 불상사가 발생할 조짐이다.


눈을 맞으며 걷는 꿈 해몽

 -> 가족 중에서 사망자가 생기거나, 누명을 쓰고 고소를 당하게 될 것이다.


눈을 맞은 사람을 보는 꿈 해몽

 -> 상을 당하거나 초상집에 문상갈 일이 생기며, 눈을 맞은 사람이 실제로 상주가 될 수 있다.


눈이 녹는 것을 보는 꿈 해몽

 -> 재산의 낭비나 손실 등 피해가 있어서 안절부절할 운명이다.


싸락눈이 내리는 꿈 해몽

 -> 사소한 일이 풀리지 않아 마음이 불편할 징조이다.


dream snow 꿈해몽 눈 폭설



안뜰이나 마당에만 눈이 내리는 꿈 해몽

 -> 집안에서 사람이 죽거나 상복을 입을 일이 발생한다는 암시이다.


눈이 집 안에 가득한 꿈 해몽

 -> 집안에 걱정거리가 생겨서 가족이 불안한 생활을 할 징조이다.


지붕 위에 눈이 쌓인 꿈 해몽

 -> 집안에 우환이나 질병이 생기고 재물의 손실이 있을 징조이다.


진눈깨비가 날리는 꿈 해몽

 -> 병에 걸리거나 집안에 우환이 생길 징조이다.


진눈깨비나 된서리가 내리는 꿈 해몽

 -> 진행하고 있는 일이 해결되지 않고 장애과 어려움을 겪게 된다.


큰눈이나 비 때문에 길이 막혀 갇혀 있는 꿈 해몽

 -> 생각외의 재난을 당하거나, 형제자매간에 불화할 것이다.


폭설로 길이 막히는 꿈 해몽

 -> 형제자매간에 불화하거나 친한 사람에게 불행이 오게 된다.


폭설로 집이 무너지는 꿈 해몽

 -> 진행중인 일이 파산하거나, 병을 얻거나 교통사고를 당하게 된다.


온몸을 눈이 덮는 꿈 해몽

 -> 일신이 편안하게 오래 오래 살 수 있는 징조이다.


함박눈이 논밭, 산야에 내리는 꿈 해몽

 -> 평소의 소망을 성취하고 재물과 이득이 많아지며, 번영할 것이라는 암시이다.


우박이나 싸락눈이 내리는 것을 보는 꿈 해몽

 -> 사소한 문제가 심각하게 확대되어 분쟁이 일어나고 낭패를 당하게 될 것이다.


음산하게 눈발이 날리는 꿈 해몽

 -> 신병에 걸려 고생하거나 집안에 환란이 생길 징조이다.


눈이 섞인 비가 내리는 꿈 해몽

 -> 진행중인 일에 난관이 따를 조짐이다.


눈이나 진눈깨비가 몸에서 떨어지지 않는 꿈 해몽

 -> 상을 당할 불상사나, 사고 등 재난을 당하게 된다는 꿈이다.


눈처럼 우박이 쌓이는 꿈 해몽

 -> 정신적, 물질적으로 풍족한 생활을 누리게 된다.


서리가 내리는 꿈 해몽

 -> 방해자나 장애물로 인해 하고 있는 일이 어려움을 당하게 된다는 뜻이다.


비가 내리는 것을 보는 꿈 해몽

 -> 어느 누구와 깊은 사랑을 나누게 될 조짐이다.


비가 시원하게 내리는 꿈 해몽

 -> 정신도 안정되고 물질도 풍부하여 여유있는 생활을 하게 될 것이다.


비가 와서 우산을 쓰거나 건물 안으로 피하는 꿈 해몽

 -> 주위사람들에 좋은 일이 생겨 본인도 이익을 얻게 된다.


비바람이 부는 꿈 해몽

 -> 질병에 걸리거나 정신적인 고통이 생기는 불안한 날이 계속될 징조이다.


비온 뒤 강 하천에 물이 불어서 넘실거리며 흐르는 꿈 해몽

 -> 재물과 이익이 많아지고 번영을 누리게 될 것이다.


빗방울이 유리창을 치는 꿈 해몽

 -> 본인의 실력을 주위 사람들에게 인정받게 된다.


건조시키려고 걸어놓은 물건 위에 비가 오는 꿈 해몽

 -> 어느 누구에게 돈이나 물건을 빌려주고 돌려 받지 못하게 된다.


논밭에 비가 많이 내려서 젖는 꿈 해몽

 -> 재물과 명예가 들어오고 자식과 관련하여 기쁨과 영화가 있을 것이다.


새는 비를 그릇에 받는 꿈 해몽

 -> 깨끗한 빗물은 재수가 있으나, 더러우면 근심과 재앙이 있을 나쁜 꿈이다.


소나기가 쏟아지면서 폭풍이 몰아치는 꿈 해몽

 -> 사람이 죽고 다치는 사고나 그와 유사한 불상사가 발생할 것이다.


시원하게 내리는 비를 보거나 흠뻑 맞는 꿈 해몽

 -> 술, 음식, 연회,잔치와 관련있는 일이 생기거나, 물자가 원활하게 되며 승진에 따른 기쁨을 맛보게 될 징조이다.


이슬이 내리는 꿈 해몽

 -> 매사에 어려움이 있어서 좌절하고 고생하게 된다.


장마가 그치고 난 뒤 깨끗한 세상을 보는 꿈 해몽

 -> 근심 걱정이 없어지고 원하는 일이 전부 순조롭게 풀릴 징조이다.


태풍이 부는가운데 하던 일을 계속 하는 꿈 해몽

 -> 권력기관의 압력으로 하던 일을 중단하게 될 위기이다.


폭우 속에서 어느 누구와 만나는 꿈 해몽

 -> 그 사람과 이별을 하거나, 다른 사람으로 인해 손실을 입게 된다.


폭풍, 회오리에 사람이나 물건이 날아가는 꿈 해몽

 -> 다른 사람의 구설이나 모함을 당하게 되며, 손재·사고 등의 피해를 본다.


폭풍우가 치는 꿈 해몽

 -> 만사가 마음대로 되지 않고 고민 걱정이 생길 징조이다.


해가 쨍쨍한데 비가 내리는 꿈 해몽

 -> 방해와 곤란을 당하여 어려움을 겪으며, 부부 또는 애인 사이에 애정의 풍파가 있을 징조이다.


홍수가 나는 꿈 해몽

 -> 가정에 불화가 일어서 가족간에 반목이 생기게 된다.


홍수가 논밭을 휩쓰는 꿈 해몽

 -> 타인과 연관된 문제 때문에 재산상의 손실을 보게 될 흉몽이다.


홍수가 자신의 앞으로 밀려드는 꿈 해몽

 -> 다른 사람들에게 영향력을 크게 행사하게 될 조짐이다.


홍수로 넘치는 물이 푸른 물인 꿈 해몽

 -> 젊은 사람에게 좋지 않은 일이 생길 조짐이다.


홍수로 도로가 파손되는 꿈 해몽

 -> 진행중인 일이 꼬이게 되고, 구설수가 생기거나 논쟁이 생기게 된다.


홍수로 바닷물이 방 안에 밀려오는 꿈 해몽

 -> 생활의 변화가 생기고 걱정하던 일들이 깨끗하게 해결된다.


홍수로 붉은 물이 넘치는 꿈 해몽

 -> 나이 많은 사람들에게 좋지 않은 일이 생길 징조이다.


- copy coding -


1···47484950515253···118

+ Recent posts