diff --git a/maxkey-web-manage/src/main/java/org/maxkey/web/endpoint/LogoutEndpoint.java b/maxkey-web-manage/src/main/java/org/maxkey/web/endpoint/LogoutEndpoint.java index cf50f349..30d5ed67 100644 --- a/maxkey-web-manage/src/main/java/org/maxkey/web/endpoint/LogoutEndpoint.java +++ b/maxkey-web-manage/src/main/java/org/maxkey/web/endpoint/LogoutEndpoint.java @@ -30,6 +30,7 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.security.web.savedrequest.SavedRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; @Controller @@ -37,19 +38,35 @@ public class LogoutEndpoint { private static Logger _logger = LoggerFactory.getLogger(LogoutEndpoint.class); + public static final String RE_LOGIN_URL = "reLoginUrl"; + @Autowired @Qualifier("authenticationRealm") AbstractAuthenticationRealm authenticationRealm; @RequestMapping(value={"/logout"}) - public ModelAndView logout(HttpServletRequest request, HttpServletResponse response){ + public ModelAndView logout( HttpServletRequest request, + HttpServletResponse response, + @RequestParam(value=RE_LOGIN_URL,required=false) String reLoginUrl){ ModelAndView modelAndView = new ModelAndView(); authenticationRealm.logout(response); SavedRequest firstSavedRequest = (SavedRequest)WebContext.getAttribute(WebConstants.FIRST_SAVED_REQUEST_PARAMETER); - String reLoginUrl=WebContext.getHttpContextPath()+"/login"; + + if(reLoginUrl==null ||reLoginUrl.equals("")) { + reLoginUrl="/login"; + } + if(firstSavedRequest!=null){ reLoginUrl= firstSavedRequest.getRedirectUrl(); } + + if(reLoginUrl!=null && !reLoginUrl.toLowerCase().startsWith("http")) { + if(reLoginUrl.startsWith("/")) { + reLoginUrl=request.getContextPath()+reLoginUrl; + }else { + reLoginUrl=request.getContextPath()+"/"+reLoginUrl; + } + } _logger.debug("re Login URL : "+ reLoginUrl); modelAndView.addObject("reloginUrl",reLoginUrl); request.getSession().invalidate(); diff --git a/maxkey-web-maxkey/src/main/java/org/maxkey/web/endpoint/LogoutEndpoint.java b/maxkey-web-maxkey/src/main/java/org/maxkey/web/endpoint/LogoutEndpoint.java index fcc31920..24ce45ad 100644 --- a/maxkey-web-maxkey/src/main/java/org/maxkey/web/endpoint/LogoutEndpoint.java +++ b/maxkey-web-maxkey/src/main/java/org/maxkey/web/endpoint/LogoutEndpoint.java @@ -95,9 +95,9 @@ public class LogoutEndpoint { ModelAndView modelAndView = new ModelAndView(); authenticationRealm.logout(response); - if(reLoginUrl==null){ + if(reLoginUrl==null ||reLoginUrl.equals("")){ SavedRequest firstSavedRequest = (SavedRequest)WebContext.getAttribute(WebConstants.FIRST_SAVED_REQUEST_PARAMETER); - reLoginUrl=WebContext.getHttpContextPath()+"/login"; + reLoginUrl="/login"; if(firstSavedRequest!=null){ reLoginUrl= firstSavedRequest.getRedirectUrl(); WebContext.removeAttribute(WebConstants.FIRST_SAVED_REQUEST_PARAMETER); @@ -106,7 +106,11 @@ public class LogoutEndpoint { //not start with http or https if(reLoginUrl!=null && !reLoginUrl.toLowerCase().startsWith("http")) { - reLoginUrl=WebContext.getHttpContextPath()+"/"+reLoginUrl; + if(reLoginUrl.startsWith("/")) { + reLoginUrl=request.getContextPath()+reLoginUrl; + }else { + reLoginUrl=request.getContextPath()+"/"+reLoginUrl; + } } _logger.debug("re Login URL : "+ reLoginUrl); diff --git a/maxkey-web-maxkey/src/main/resources/templates/views/authorize/authorize_common.ftl b/maxkey-web-maxkey/src/main/resources/templates/views/authorize/authorize_common.ftl index e006683a..273146a0 100644 --- a/maxkey-web-maxkey/src/main/resources/templates/views/authorize/authorize_common.ftl +++ b/maxkey-web-maxkey/src/main/resources/templates/views/authorize/authorize_common.ftl @@ -1,8 +1,7 @@ - - +