Servlet Filter ์ฌ์ฉํ๊ธฐ
Filter์ ๊ฐ๋ ๊ณผ ์ฌ์ฉํ๋ ์ด์
ํํฐ๋ ์๋ธ๋ฆฟ ์คํ ์ , ํ์ ์ด๋ค ์์ ์ ํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ๋ฐ์ดํฐ์ ์ํธ๋ฅผ ํด์ ํ๋ค๊ฑฐ๋, ์๋ธ๋ฆฟ์ด ์คํ๋๊ธฐ ์ ์ ํ์ํ ์์์ ๋ฏธ๋ฆฌ ์ค๋นํ๊ฑฐ๋, ์๋ธ๋ฆฟ์ด ์คํ๋ ๋๋ง๋ค ๋ก๊ทธ๋ฅผ ๋จ๊ธด๋ค๊ฑฐ๋ ํ๋ ์์ ์ ํํฐ๋ฅผ ํตํด ์ฒ๋ฆฌํ ์ ์๋ค.
๋ง์ฝ ๊ทธ๋ฐ ์์ ๋ค์ ์๋ธ๋ฆฟ์ ๋ด๋๋ค๋ฉด ํ์ํ ์๋ธ๋ฆฟ๋ง๋ค ํด๋น ์ฝ๋๋ฅผ ์ฝ์ ํด์ผํ๊ณ ํ์๊ฐ ์์ด์ง๋ฉด ๊ทธ ์ฝ๋๋ฅผ ์ฝ์ ํ ์๋ธ๋ฆฟ์ ๋ชจ๋ ์ฐพ์์ ์ญ์ ํด์ผ ํ๋ฏ๋ก ๊ด๋ฆฌํ๊ธฐ๊ฐ ๋งค์ฐ ๋ฒ๊ฑฐ๋ก์์ง๋ค.
ํํฐ๋ก POST Request Parameter ๋ฌธ์ ์งํฉ ์ค์ ํ๊ธฐ
POST ์์ฒญ์ ๊ฒฝ์ฐ ์๋ฒ๋ก ๋ณด๋ด๋ ๋ฐ์ดํฐ๊ฐ message body์ ์๊ณ ์๋ธ๋ฆฟ์์ ์ด ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด๋ ค๋ฉด getParameter()๋ฅผ ํธ์ถํ๋ค. ๋ง์ฝ ๋ฐ์ดํฐ์ ํ๊ธ๊ณผ ๊ฐ์ ๋ฉํฐ ๋ฐ์ดํธ ๋ฌธ์๊ฐ ์์ ๋ ๊ทธ๋ฅ getParameter()๋ฅผ ํธ์ถํ๋ฉด ํ๊ธ์ด ๊นจ์ง๋ค. ๋ค์๊ณผ ๊ฐ์ด setCharacterEncoding()์ ํธ์ถํด์ message body์ ๋ฐ์ดํฐ์ ๋ฌธ์ ์งํฉ์ ์ค์ ํด์ผ ํ๋ค.
request.setCharacterEncoding("UTF-8");
๊ทธ๋ฌ๋ POST ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์๋ธ๋ฆฟ ๋ง๋ค ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋งค์ฐ ๋ฒ๊ฑฐ๋ก์ด ์์ ์ด๋ค. ์ด ๋ ์๋ธ๋ฆฟ ํํฐ๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ๋จํ ์ฒ๋ฆฌํ ์ ์๋ค.
ํํฐ ๋ง๋ค๊ธฐ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class CharacterEncodingFilter implements Filter {
FilterConfig config;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.config = filterConfig;
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding(config.getInitParameter("encoding"));
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() { }
}
|
cs |
ํด๋์ค๋ฅผ ์์ฑํ๊ณ javax.servlet.Filter ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค. Filter ์ธํฐํ์ด์ค์ ์ ์ธ๋ init(), doFilter(), destroy()๋ ํํฐ์ ์๋ช ์ฃผ๊ธฐ์ ๊ด๋ จ๋ ๋ฉ์๋์ด๋ค.
(1) init()
init() ๋ฉ์๋๋ ํํฐ ๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ ์ค๋น ์์ ์ ์ํด ๋ฑ ํ๋ฒ ํธ์ถ๋๋ค. ์๋ธ๋ฆฟ์ init()๊ณผ ๊ฐ์ ์ฉ๋์ด๋ค. ์ด ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ FilterConfig์ ์ธ์คํด์ค์ด๋ค. ์ด ์ธ์คํด์ค๋ฅผ ํตํด ํํฐ ์ด๊ธฐํ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ๊บผ๋ผ์ ์๋ค. ์ ์ฝ๋์์๋ doFilter()์์ ์ฌ์ฉํ๊ธฐ ์ํด ์ธ์คํด์ค ๋ณ์ config์ ์ ์ฅํ๋ค.
(2) doFilter()
ํํฐ์ ๋งคํ๋ URL์ ์์ฒญ์ด ๋ค์ด์ฌ๋๋ง๋ค doFilter()๊ฐ ํธ์ถ๋๋ค. ์ด ๋ฉ์๋์ ํํฐ๊ฐ ํ ์์ ์ ์์ฑํ๋ค.
filterChain์ ๋ค์ ํํฐ๋ฅผ ๊ฐ๋ฆฌํค๊ณ filterChain.doFilter()๋ ๋ค์ ํํฐ๋ฅผ ํธ์ถํ๋ค. ๋ค์ ํํฐ๊ฐ ์๋ค๋ฉด ๋ด๋ถ์ ์ผ๋ก ์๋ธ๋ฆฟ์ service()๋ฅผ ํธ์ถํ๋ค.
์๋ธ๋ฆฟ์ด ์คํ๋๊ธฐ ์ ์ ์ฒ๋ฆฌํ ์์ ์ filterChain.doFilter() ์ด์ ์, ์๋ธ๋ฆฟ์ด ์คํ๋ ํ์ ์ฒ๋ฆฌํ ์์ ์ filterChain.doFilter() ์ดํ์ ์์ฑํ๋ค.
๋ณธ ์์ ์์๋ ์๋ธ๋ฆฟ์ด ์คํ๋๊ธฐ ์ ์ request parameter์ ๋ฌธ์ ์งํฉ์ ๋จผ์ ์ค์ ํ๊ธฐ ์ํด filterChain.doFilter() ์ด์ ์ setCharacterEncoding()์ ํธ์ถํ๋ค.
(3) destroy()
์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ข ๋ฃํ๊ธฐ ์ ์ ํํฐ๋ค์ ๋ํด destroy()๋ฅผ ํธ์ถํด์ ๋ง๋ฌด๋ฆฌ ์์ ์ ํ๋ค. ๋ณธ ์์ ๋ ํน๋ณํ ๋ง๋ฌด๋ฆฌํ ์์ ์ด ์์ผ๋ฏ๋ก ๋น ๋ฉ์๋๋ก ๋๋ค.
ํํฐ์ ๊ตฌ๋ ๊ณผ์
โ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์์ํ ๋ DDํ์ผ(web.xml)์ ๋ฑ๋ก๋ ํํฐ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ init()์ ํธ์ถํ๋ค.
โก ํด๋ผ์ด์ธํธ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ํด๋นํ๋ ํํฐ์ doFilter()๋ฅผ ํธ์ถํ๋ค.
โข doFilter()์์ ์์ ์ ์คํํ๊ณ ๋ค์ ํํฐ์ doFilter()๋ฅผ ํธ์ถํ๋ค.
โฃ ๋ง์ง๋ง ํํฐ๊น์ง โข์ ๋ฐ๋ณตํ๋ค.
โค ๋ง์ง๋ง ํํฐ๋ ์๋ธ๋ฆฟ์ service()๋ฅผ ํธ์ถํ๋ค.
โฅ ์๋ธ๋ฆฟ์ service()๊ฐ ๋๋๋ฉด service()๋ฅผ ํธ์ถํ๋ ์ด์ ํํฐ๋ก ๋์๊ฐ๋ค.
โฆ ๋ฐ๋ณตํด์ ์ ์ผ ์ฒ์ ํธ์ถ๋๋ ํํฐ๊น์ง ๋์๊ฐ๋ค.
โง ๋ง์ง๋ง์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ธ๋ค.
ํํฐ ๋ฐฐ์น(Deployment)
ํํฐ์ ๋ฐฐ์น ๋ฐฉ๋ฒ์ web.xml์ ์ค์ ํ๋ ๋ฐฉ๋ฒ๊ณผ annotation์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
web.xml์ ๋ฐฐ์น ์ ๋ณด ์ค์
์๋ธ๋ฆฟ์ ๋ฐฐ์น ์ ๋ณด๋ฅผ ์ค์ ํ๋ ๊ฒ๊ณผ ์ ์ฌํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<!-- ํํฐ ์ ์ธ -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.atoz_develop.spms.filters.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!-- ํํฐ URL ๋งคํ-->
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
|
cs |
<filter-name> : ํํฐ ๋ณ์นญ ์ค์
<filter-class> : ํจํค์ง ์ด๋ฆ์ ํฌํจํ ํํฐ ํด๋์ค ์์ฑ
<init-param> : ํํฐ๊ฐ ์ฌ์ฉํ ์ ์ ๋ฐ์ดํฐ ์ค์
<filter-mapping> : ํํฐ๋ฅผ ์ฌ์ฉํ URL ๋งคํ
<filter-name> : ํํฐ ๋ณ์นญ ์ง์
<url-pattern> : ํํฐ๊ฐ ์ ์ฉ๋์ด์ผ ํ๋ URL ์ง์ . /*์ ๊ฐ์ด ์ง์ ํ๋ฉด ๋ชจ๋ ์์ฒญ์ ๋ํด ํํฐ ์ ์ฉ
์ด๋ ธํ ์ด์ ์ ๋ฐฐ์น ์ ๋ณด ์ค์
1
2
3
4
5
6
|
@WebFilter(
urlPatterns = "/*",
initParams = {
@WebInitParam(name="encoding", value="UTF-8")
}
)
|
cs |
ํํฐ ํด๋์ค์ ์์ ๊ฐ์ด @WebFilter ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํ๋ค.
urlPatterns์ ์ง์ ํด์ผ ํ๋ ๊ฐ์ ์ web.xml๋ก ์ค์ ํ๋ ๊ฒ์์ <filter-mapping>๋ถ์ ๋์ผํ๋ค.
์ด๋ ๊ฒ ํํฐ๋ฅผ ๊ตฌํํ๊ณ ์ ์ฉํ๋ฉด POST ์์ฒญ์์ ๋งค๊ฐ๋ณ์๋ฅผ ๊บผ๋ด๋ ๋ถ๋ถ์์ setCharacterEncoding() ํธ์ถ๋ถ๋ฅผ ๋ชจ๋ ์ ๊ฑฐํด๋ ํ๊ธ์ด ๊นจ์ง์ง ์๋๋ค.
ํํฐ ์ ์ฉ ์ฌ๋ก
์ด๋ ๊ฒ ํํฐ๋ฅผ ์ด์ฉํด ์๋ธ๋ฆฟ ์คํ ์ , ํ์ ์ด๋ค ์์ ์ ์ํํ ์ ์์ผ๋ฉฐ ์ ์ฉ ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ฌ์ ์์ (์๋ธ๋ฆฟ ์คํ ์ ) | ์ฌํ ์์ (์๋ธ๋ฆฟ ์คํ ํ) |
๋ฌธ์ ์งํฉ ์ค์ | ์๋ต ๋ฐ์ดํฐ ์์ถ |
์์ถ ํด์ | ์๋ต ๋ฐ์ดํฐ ์ํธํ |
์ํธํ๋ ๋ฐ์ดํฐ์ ๋ณตํธํ | ์๋ต ๋ฐ์ดํฐ ํ์ ๋ณํ |
๋ก๊ทธ ์์ฑ | |
์ฌ์ฉ์ ๊ฒ์ฆ | |
์ฌ์ฉ์ ๊ถํ ํ์ธ |
References
์ดํ๊ฐ์ ์๋ฐ ์น ๊ฐ๋ฐ ์ํฌ๋ถ(ํ๋ฆฌ๋ , 2016, ์์ง์)
๋๊ธ