diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java b/patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java index fa7655434e..f5e03878ca 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java +++ b/patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java @@ -3,22 +3,23 @@ package com.baeldung.patterns.filters; import com.baeldung.patterns.commands.FrontCommand; import com.baeldung.patterns.commands.LoginCommand; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; -public class AuthenticationFilter extends BaseFilter { +public class AuthenticationFilter implements Filter { private OnIntercept callback; public AuthenticationFilter(OnIntercept callback) { this.callback = callback; } + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + @Override public void doFilter( ServletRequest request, @@ -37,4 +38,8 @@ public class AuthenticationFilter extends BaseFilter { chain.doFilter(request, response); } } + + @Override + public void destroy() { + } } diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java b/patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java index 1277ca726d..2856bb1112 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java +++ b/patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java @@ -2,9 +2,13 @@ package com.baeldung.patterns.filters; import javax.servlet.*; import javax.servlet.annotation.WebFilter; +import javax.servlet.annotation.WebInitParam; import java.io.IOException; -@WebFilter(servletNames = "front-controller") +@WebFilter( + servletNames = {"front-controller"}, + initParams = {@WebInitParam(name = "encoding", value = "UTF-8")} +) public class EncodingFilter extends BaseFilter { private String encoding; diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java b/patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java index d2b64c7d06..789fc003a0 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java +++ b/patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java @@ -1,14 +1,11 @@ package com.baeldung.patterns.filters; -import javax.servlet.Filter; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import javax.servlet.*; import java.io.IOException; import java.util.Arrays; import java.util.Iterator; -public class FilterChainImpl implements javax.servlet.FilterChain { +public class FilterChainImpl implements FilterChain { private Iterator filters; public FilterChainImpl(Filter... filters) { diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/TemplateFilter.java b/patterns/src/main/java/com/baeldung/patterns/filters/TemplateFilter.java new file mode 100644 index 0000000000..939d9ad84d --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/filters/TemplateFilter.java @@ -0,0 +1,35 @@ +package com.baeldung.patterns.filters; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public abstract class TemplateFilter extends BaseFilter { + + protected abstract void preFilter( + HttpServletRequest request, + HttpServletResponse response + ) throws IOException, ServletException; + + protected abstract void postFilter( + HttpServletRequest request, + HttpServletResponse response + ) throws IOException, ServletException; + + @Override + public void doFilter( + ServletRequest request, + ServletResponse response, + FilterChain chain + ) throws IOException, ServletException { + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + HttpServletResponse httpServletResponse = (HttpServletResponse) response; + preFilter(httpServletRequest, httpServletResponse); + chain.doFilter(request, response); + postFilter(httpServletRequest, httpServletResponse); + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java b/patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java index 0abfac7cd6..5c2358686b 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java +++ b/patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java @@ -1,18 +1,19 @@ package com.baeldung.patterns.filters; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.HashSet; import java.util.Set; -public class VisitorCounterFilter extends BaseFilter { +public class VisitorCounterFilter implements Filter { private static Set users = new HashSet<>(); + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + @Override public void doFilter( ServletRequest request, @@ -21,10 +22,12 @@ public class VisitorCounterFilter extends BaseFilter { ) throws IOException, ServletException { HttpSession session = ((HttpServletRequest) request).getSession(false); String username = (String) session.getAttribute("username"); - if (!users.contains(username)) { - users.add(username); - } + users.add(username); request.setAttribute("counter", users.size()); chain.doFilter(request, response); } + + @Override + public void destroy() { + } } diff --git a/patterns/src/main/resources/front controller.png b/patterns/src/main/resources/front_controller.png similarity index 100% rename from patterns/src/main/resources/front controller.png rename to patterns/src/main/resources/front_controller.png diff --git a/patterns/src/main/resources/front controller.puml b/patterns/src/main/resources/front_controller.puml similarity index 100% rename from patterns/src/main/resources/front controller.puml rename to patterns/src/main/resources/front_controller.puml diff --git a/patterns/src/main/resources/intercepting_filter.png b/patterns/src/main/resources/intercepting_filter.png new file mode 100644 index 0000000000..9ccacc8081 Binary files /dev/null and b/patterns/src/main/resources/intercepting_filter.png differ diff --git a/patterns/src/main/resources/intercepting_filter.puml b/patterns/src/main/resources/intercepting_filter.puml new file mode 100644 index 0000000000..b06b822323 --- /dev/null +++ b/patterns/src/main/resources/intercepting_filter.puml @@ -0,0 +1,17 @@ +@startuml +scale 1.5 + +class Client +class FilterManager +interface FilterChain +interface "Filter 1" +interface "Filter 2" +interface "Filter 3" + +Client .right.-- FilterManager +FilterManager .right.-- Target +FilterManager -- FilterChain +FilterChain .right.-- "Filter 3" +FilterChain .right.-- "Filter 2" +FilterChain .right.-- "Filter 1" +@enduml