개발 창고/Web
[Spring] WEB-INF에 접근하기
로이제로
2020. 8. 20. 11:10
반응형
보통 개발환경과 서버 환경을 동일하게 사용하기 위해서는 절대 주소보다는 상대 주소를 활용하는 경우가 많습니다. (때로는 config파일에서 세팅을 고정해서 활용하는 방법도 있지만 이건 추후에 작성하도록 하겠습니다.)
만약 WEB-INF 내 config폴더에서 file.xml이라는 파일을 읽어들일 경우 다음과 같이 호출하게 되면 내부의 파일을 호출 가능합니다.
@Controller
public class BaseController {
@Inject
private ServletContext context;
...
public ModelAndView index(ModelMap model){
...
File file = new File(context.getRealPath("/WEB-INF/config/file.xml");
...
return new ModelAndView("front/index");
}
}
여기에서 Inject는 Java에서 지원하는 버전이고 방식에 따라 아래와 같이 @Autowired도 사용 가능합니다.
@Controller
public class BaseController {
@Autowired
private ServletContext context;
...
public ModelAndView index(ModelMap model){
...
File file = new File(context.getRealPath("/WEB-INF/config/file.xml");
...
return new ModelAndView("front/index");
}
}
이렇게 호출을 하게 되면 file에는 WEB-INF 내 config파일 내 file.xml을 불러들이는 게 가능합니다.
이런 방식을 최근에 사용하게 된 계기는 Firebase를 활용해 push서버를 개발 시 인증을 위해 json파일을 고정위치에서 불러들여야 하는 이유로 활용하고 있습니다.
@Inject
pirvate ServletContext servletContext;
public void sendFcm(String tokenId, String title, String content, String linkUrl) {
String jsonPath = servletContext.getRealPath("/WEB-INF/config/appname-****-firebase-adminsdk-***.json");
try {
// 본인의 json 파일 경로 입력
FileInputStream refreshToken = new FileInputStream(jsonPath);
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(refreshToken))
.setDatabaseUrl("https://appname.firebaseio.com")
.build();
...
}catch(Exception e){
...
}
}
위와 같이 고정위치에 json을 두고 push서버로서 인증을 해야 하는 경우 활용 가능합니다.
반응형