diff --git a/.DS_Store b/.DS_Store index 9d21101..aeeafc9 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/src/.DS_Store b/src/.DS_Store index b7c0af0..41e38a8 100644 Binary files a/src/.DS_Store and b/src/.DS_Store differ diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/DataSourceConfig.java b/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/DataSourceConfig.java index 8e07597..e2acada 100644 --- a/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/DataSourceConfig.java +++ b/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/DataSourceConfig.java @@ -35,7 +35,7 @@ public class DataSourceConfig { dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/gcc_apps"); dataSource.setUsername("root"); - dataSource.setPassword(""); + dataSource.setPassword("1"); return dataSource; } /* diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/SecurityConfig.java b/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/SecurityConfig.java index b562173..3e6bfe0 100644 --- a/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/SecurityConfig.java +++ b/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/SecurityConfig.java @@ -57,7 +57,11 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .and() .logout() .logoutUrl("/logout") // Include the logout URL - .logoutSuccessUrl("/login"); // Include the success logout URL + .logoutSuccessUrl("/login") // Include the success logout URL + .and() + .sessionManagement() + .sessionFixation() + .migrateSession(); // or .none(), .newSession() } diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/WebMvcConfig.java b/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/WebMvcConfig.java index dae4e39..0717fc3 100644 --- a/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/WebMvcConfig.java +++ b/src/main/java/in/gov/chennaicorporation/gccoffice/configuration/WebMvcConfig.java @@ -10,19 +10,52 @@ import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import in.gov.chennaicorporation.gccoffice.interceptor.AppInterceptor; +import in.gov.chennaicorporation.gccoffice.repository.AppModuleAccessRepository; +import in.gov.chennaicorporation.gccoffice.repository.AppModuleRepository; +import in.gov.chennaicorporation.gccoffice.repository.MenuItemAccessRepository; +import in.gov.chennaicorporation.gccoffice.repository.MenuItemRepository; +import in.gov.chennaicorporation.gccoffice.repository.SubMenuItemAccessRepository; +import in.gov.chennaicorporation.gccoffice.repository.SubMenuItemRepository; @Configuration public class WebMvcConfig implements WebMvcConfigurer { private final String uploadDirectory; + private AppModuleAccessRepository appModuleAccessRepository; + private MenuItemAccessRepository menuItemAccessRepository; + private SubMenuItemAccessRepository subMenuItemAccessRepository; + + private AppModuleRepository appModuleRepository; + private MenuItemRepository menuItemRepository; + private SubMenuItemRepository subMenuItemRepository; @Autowired - public WebMvcConfig( - @Value("${file.upload.directory}") String uploadDirectory) { + public WebMvcConfig( + @Value("${file.upload.directory}") String uploadDirectory, + AppModuleAccessRepository appModuleAccessRepository, + MenuItemAccessRepository menuItemAccessRepository, + SubMenuItemAccessRepository subMenuItemAccessRepository, + AppModuleRepository appModuleRepository, + MenuItemRepository menuItemRepository, + SubMenuItemRepository subMenuItemRepository) { this.uploadDirectory = uploadDirectory; + this.appModuleAccessRepository = appModuleAccessRepository; + this.menuItemAccessRepository = menuItemAccessRepository; + this.subMenuItemAccessRepository = subMenuItemAccessRepository; + this.appModuleRepository = appModuleRepository; + this.menuItemRepository = menuItemRepository; + this.subMenuItemRepository = subMenuItemRepository; } + @Override public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(new AppInterceptor()); + + registry.addInterceptor(new AppInterceptor( + appModuleAccessRepository, + menuItemAccessRepository, + subMenuItemAccessRepository, + appModuleRepository, + menuItemRepository, + subMenuItemRepository)); } @Override diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/controller/CustomErrorController.java b/src/main/java/in/gov/chennaicorporation/gccoffice/controller/CustomErrorController.java index e009122..20909c7 100644 --- a/src/main/java/in/gov/chennaicorporation/gccoffice/controller/CustomErrorController.java +++ b/src/main/java/in/gov/chennaicorporation/gccoffice/controller/CustomErrorController.java @@ -23,9 +23,25 @@ public class CustomErrorController implements ErrorController { @RequestMapping(value = ERROR_PATH, produces = "text/html") public String handleWebError(HttpServletRequest request, Model model) { // Retrieve error information from the request - HttpStatus status = HttpStatus.valueOf((Integer) request.getAttribute("javax.servlet.error.status_code")); + // HttpStatus status = HttpStatus.valueOf((Integer) request.getAttribute("javax.servlet.error.status_code")); + //Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception"); + + // Retrieve error information from the request + Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code"); + if (statusCode == null) { + // Add the error message to the model + model.addAttribute("errorStatus", "Error 403"); + model.addAttribute("errorError", "403 - Access Denied"); + model.addAttribute("errorMessage", "Oops, You don`t have permission to access this page."); + // Handle the case where the status code is null + // You may choose to set default values or redirect to a generic error page + return "error-403"; + } + + HttpStatus status = (statusCode != null) ? HttpStatus.valueOf(statusCode) : HttpStatus.INTERNAL_SERVER_ERROR; Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception"); + // Add custom error handling logic for web applications here String errorPage = "error"; Integer errorStatus = 404; diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/interceptor/AppInterceptor.java b/src/main/java/in/gov/chennaicorporation/gccoffice/interceptor/AppInterceptor.java index 7425521..e889fff 100644 --- a/src/main/java/in/gov/chennaicorporation/gccoffice/interceptor/AppInterceptor.java +++ b/src/main/java/in/gov/chennaicorporation/gccoffice/interceptor/AppInterceptor.java @@ -1,5 +1,6 @@ package in.gov.chennaicorporation.gccoffice.interceptor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; @@ -8,31 +9,271 @@ import org.springframework.security.web.util.matcher.RequestMatcher; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; +import in.gov.chennaicorporation.gccoffice.entity.AppModuleAccessEntity; +import in.gov.chennaicorporation.gccoffice.entity.AppModuleEntity; +import in.gov.chennaicorporation.gccoffice.entity.MenuItemAccessEntity; +import in.gov.chennaicorporation.gccoffice.entity.MenuItemEntity; +import in.gov.chennaicorporation.gccoffice.entity.SubMenuItemAccessEntity; +import in.gov.chennaicorporation.gccoffice.entity.SubMenuItemEntity; +import in.gov.chennaicorporation.gccoffice.repository.AppModuleAccessRepository; +import in.gov.chennaicorporation.gccoffice.repository.AppModuleRepository; +import in.gov.chennaicorporation.gccoffice.repository.MenuItemAccessRepository; +import in.gov.chennaicorporation.gccoffice.repository.MenuItemRepository; +import in.gov.chennaicorporation.gccoffice.repository.SubMenuItemAccessRepository; +import in.gov.chennaicorporation.gccoffice.repository.SubMenuItemRepository; +import in.gov.chennaicorporation.gccoffice.service.LoginUserInfo; + +import java.util.List; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class AppInterceptor implements HandlerInterceptor { + + List getAppModuleAccessEntities; + List getMenuItemAccessEntities; + List getSubMenuItemAccessEntities; + + private AppModuleAccessRepository appModuleAccessRepository; + private MenuItemAccessRepository menuItemAccessRepository; + private SubMenuItemAccessRepository subMenuItemAccessRepository; + + List getAppModuleEntities; + List getMenuItemEntities; + List getSubMenuItemEntities; + + private AppModuleRepository appModuleRepository; + private MenuItemRepository menuItemRepository; + private SubMenuItemRepository subMenuItemRepository; - @Override - public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, - ModelAndView modelAndView) throws Exception { - // Create a RequestMatcher for login and error URLs - RequestMatcher loginPageMatcher = new AntPathRequestMatcher("/login"); - RequestMatcher errorPageMatcher = new AntPathRequestMatcher("/error"); - - // Check if the current request matches the login or error page URLs - if (!loginPageMatcher.matches(request) && !errorPageMatcher.matches(request)) { - if (modelAndView != null) { - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if (authentication != null && authentication.isAuthenticated()) { - Object principal = authentication.getPrincipal(); - if (principal instanceof UserDetails) { - UserDetails userDetails = (UserDetails) principal; - modelAndView.addObject("currentUserDetails", userDetails); - //System.out.println(userDetails.getAuthorities()); - } - } - } + @Autowired + public AppInterceptor(AppModuleAccessRepository appModuleAccessRepository, + MenuItemAccessRepository menuItemAccessRepository, + SubMenuItemAccessRepository subMenuItemAccessRepository, + AppModuleRepository appModuleRepository, + MenuItemRepository menuItemRepository, + SubMenuItemRepository subMenuItemRepository) { + + this.appModuleAccessRepository = appModuleAccessRepository; + this.menuItemAccessRepository = menuItemAccessRepository; + this.subMenuItemAccessRepository = subMenuItemAccessRepository; + + this.appModuleRepository = appModuleRepository; + this.menuItemRepository = menuItemRepository; + this.subMenuItemRepository = subMenuItemRepository; + } + + private boolean isLoginPage(HttpServletRequest request) { + RequestMatcher loginPageMatcher = new AntPathRequestMatcher("/login"); + return loginPageMatcher.matches(request); + } + + private boolean isErrorPage(HttpServletRequest request) { + RequestMatcher errorPageMatcher = new AntPathRequestMatcher("/error"); + return errorPageMatcher.matches(request); + } + + private boolean isfavicon(HttpServletRequest request) { + RequestMatcher loginPageMatcher = new AntPathRequestMatcher("/favicon.ico"); + return loginPageMatcher.matches(request); + } + + public static String[] Split(String request,String patten) { + String path = request; + // Split the string by "/" + String[] parts = path.split(patten); + /* + // Display the parts + for (String part : parts) { + System.out.println(part); + } + */ + return parts; + } + + private boolean hasModuleAccess(String moduleName) { + getAppModuleEntities = appModuleRepository.findByModulePath(moduleName); + System.out.println("DataTable Size for the url ("+moduleName+"): "+getAppModuleEntities.size()); + + String moduleid = null; + + if(getAppModuleEntities.size()>0) { + for ( AppModuleEntity appModuleEntity : getAppModuleEntities) { + moduleid = appModuleEntity.getId().toString(); + } + if(moduleid != null) { + String userGroupId = LoginUserInfo.getUserGroupId(); + System.out.println("Query input`s :\n userGroupId : "+userGroupId+"\n moduleid : "+moduleid); + getAppModuleAccessEntities = appModuleAccessRepository.findByAll(userGroupId,moduleid); + if(getAppModuleAccessEntities.size()>0) { + return true; + } + } + } + return false; + } + + private boolean hasMenuAccess(String url,String moduleName,String menuName) { + + if(!hasModuleAccess(moduleName)) {return false; } + + getMenuItemEntities = menuItemRepository.findByUrl(url); + System.out.println("DataTable Size for the url ("+url+"): "+getMenuItemEntities.size()); + + String moduleid = null; + String menuid = null; + + if(getMenuItemEntities.size()>0) { + for (MenuItemEntity MenuEntity : getMenuItemEntities) { + moduleid = MenuEntity.getModuleId().getId().toString(); + menuid = MenuEntity.getId().toString(); + } + if(moduleid != null && menuid != null) { + String userGroupId = LoginUserInfo.getUserGroupId(); + System.out.println("Query input`s :\n userGroupId : "+userGroupId+"\n moduleid : "+moduleid+"\n menuid : "+menuid); + getMenuItemAccessEntities = menuItemAccessRepository.findByAll(userGroupId,moduleid,menuid); + if(getMenuItemAccessEntities.size()>0) { + return true; + } + } + } + return false; + } + + private boolean hasSubMenuAccess(String url,String moduleName,String menuName,String subMenuName) { + + if(!hasModuleAccess(moduleName)) {return false; } + + getSubMenuItemEntities = subMenuItemRepository.findByUrl(url); + System.out.println("DataTable Size for the url ("+url+"): "+getSubMenuItemEntities.size()); + + String moduleid = null; + String menuid = null; + String submenuid = null; + + if(getSubMenuItemEntities.size()>0) { + for (SubMenuItemEntity subMenuEntity : getSubMenuItemEntities) { + moduleid = subMenuEntity.getModuleId().getId().toString(); + menuid = subMenuEntity.getMenuItemId().getId().toString(); + submenuid = subMenuEntity.getId().toString(); + } + if(moduleid != null && menuid != null && submenuid != null) { + String userGroupId = LoginUserInfo.getUserGroupId(); + System.out.println("Query input`s :\n userGroupId : "+userGroupId+"\n moduleid : "+moduleid+"\n menuid : "+menuid+"\n submenuid : "+submenuid); + getSubMenuItemAccessEntities = subMenuItemAccessRepository.findByAll(userGroupId,moduleid,menuid,submenuid); + if(getSubMenuItemAccessEntities.size()>0) { + // Check Parent Menu Access (Menu Access) + if(moduleid != null && menuid != null) { + System.out.println("Query input`s :\n userGroupId : "+userGroupId+"\n moduleid : "+moduleid+"\n menuid : "+menuid); + getMenuItemAccessEntities = menuItemAccessRepository.findByAll(userGroupId,moduleid,menuid); + if(getMenuItemAccessEntities.size()>0) { + return true; + } + } + } + } + } + return false; + } + + private boolean hasAccess(String path) { + if(LoginUserInfo.getUserRole().equals("ADMIN")) { + return true; } + + String url = removeLeadingSlash(path); + + System.out.println("Give URL : "+path+" After remove leading slash : "+url); + + // If default home page + if(path.equals("/")) { + return true; + } + + //continue for access check + String[] parts = Split(url, "/"); + + if(parts.length<=0) {return true;} + + System.out.println(parts.length); + + if(parts.length>0) { + int j=0; + for (String part : parts) { + System.out.println(j+") URL SPLIT: "+part); + j++; + } + String moduleName = ""; + String menuName = ""; + String subMenuName = ""; + if(parts.length==1) { // Check Only Module Access + moduleName = parts[0]; + return hasModuleAccess(moduleName); + } + else if(parts.length==2) { // Check Module & Menu Access + moduleName = parts[0]; + menuName = parts[1]; + subMenuName = ""; + return hasMenuAccess(url,moduleName,menuName); + } + else if(parts.length==3) { // Check Module , Menu & Sub-Menu Access + moduleName = parts[0]; + menuName = parts[1]; + subMenuName = parts[2]; + return hasSubMenuAccess(url,moduleName,menuName,subMenuName); + } + } + + return false; + } + + public static String removeLeadingSlash(String input) { + if (input.startsWith("/")) { + return input.substring(1); + } + return input; + } + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + + if (!isLoginPage(request) && !isErrorPage(request) && !isfavicon(request)) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication != null && authentication.isAuthenticated()) { + String fullRequestURI = request.getRequestURI(); + String contextPath = request.getContextPath(); + String path = fullRequestURI.substring(contextPath.length()); + if(!hasAccess(path)) { + Object principal = authentication.getPrincipal(); + UserDetails userDetails = (UserDetails) principal; + + System.out.println("1) Access Deny For --- " + userDetails.getAuthorities().toString()); + // Redirect to the error page + //response.sendRedirect(request.getContextPath() + "/error"); + request.getRequestDispatcher("/error").forward(request, response); + } + } + } + + // Continue with the request processing + return true; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, + ModelAndView modelAndView) throws Exception { + // Check if the current request matches the login or error page URLs + if (!isLoginPage(request) && !isErrorPage(request) && !isfavicon(request)) { + if (modelAndView != null) { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if (authentication != null && authentication.isAuthenticated()) { + Object principal = authentication.getPrincipal(); + if (principal instanceof UserDetails) { + UserDetails userDetails = (UserDetails) principal; + modelAndView.addObject("currentUserDetails", userDetails); + } + } + } + } } -} \ No newline at end of file +} diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/AppModuleAccessRepository.java b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/AppModuleAccessRepository.java index bc47a39..4736ec2 100644 --- a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/AppModuleAccessRepository.java +++ b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/AppModuleAccessRepository.java @@ -20,4 +20,7 @@ public interface AppModuleAccessRepository extends JpaRepository findByUserGroupID(@Param("usergroup_id") String usergroup_id); + + @Query(value = "SELECT * FROM `modules_access` WHERE (`usergroup_id`=:usergroup_id AND `module_id`=:module_id) AND (`isactive`=1 AND `isdelete`=0)", nativeQuery = true) + List findByAll(@Param("usergroup_id") String usergroup_id,@Param("module_id") String module_id); } \ No newline at end of file diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/AppModuleRepository.java b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/AppModuleRepository.java index 43da94a..69bd530 100644 --- a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/AppModuleRepository.java +++ b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/AppModuleRepository.java @@ -21,4 +21,7 @@ public interface AppModuleRepository extends JpaRepository showAllById(String[] checkModuleid); + + @Query(value = "SELECT * FROM `modules` WHERE (`module_path` = :module_path) AND (`isactive`=1 AND `isdelete`=0) LIMIT 0,1", nativeQuery = true) + List findByModulePath(String module_path); } \ No newline at end of file diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/MenuItemAccessRepository.java b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/MenuItemAccessRepository.java index 4b195ca..a96050a 100644 --- a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/MenuItemAccessRepository.java +++ b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/MenuItemAccessRepository.java @@ -13,6 +13,7 @@ import in.gov.chennaicorporation.gccoffice.entity.AppModuleAccessEntity; import in.gov.chennaicorporation.gccoffice.entity.AppModuleEntity; import in.gov.chennaicorporation.gccoffice.entity.MenuItemAccessEntity; import in.gov.chennaicorporation.gccoffice.entity.MenuItemEntity; +import in.gov.chennaicorporation.gccoffice.entity.SubMenuItemAccessEntity; @Repository @Transactional @@ -22,4 +23,7 @@ public interface MenuItemAccessRepository extends JpaRepository findByUserGroupID(@Param("usergroup_id") String usergroup_id, @Param("module_id") String module_id); + + @Query(value = "SELECT * FROM `menuitem_access` WHERE (`usergroup_id`=:usergroup_id AND `module_id`=:module_id AND `menuitem_id`=:menuitem_id) AND (`isactive`=1 AND `isdelete`=0) LIMIT 0,1", nativeQuery = true) + List findByAll(@Param("usergroup_id") String usergroup_id,@Param("module_id") String module_id,@Param("menuitem_id") String menuitem_id); } \ No newline at end of file diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/MenuItemRepository.java b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/MenuItemRepository.java index fa8d5a2..967c6f1 100644 --- a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/MenuItemRepository.java +++ b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/MenuItemRepository.java @@ -10,6 +10,7 @@ import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import in.gov.chennaicorporation.gccoffice.entity.MenuItemEntity; +import in.gov.chennaicorporation.gccoffice.entity.SubMenuItemAccessEntity; @Repository @Transactional @@ -22,4 +23,8 @@ public interface MenuItemRepository extends JpaRepository getMenuItemByModuleIdAccess(@Param("module_id") int module_id, String[] checkMenuid); + + @Query(value = "SELECT * FROM `menuitem` WHERE (`isactive`=1 AND `isdelete`=0) AND (`url`=:url) LIMIT 0,1", nativeQuery = true) + List findByUrl(@Param("url") String url); + } \ No newline at end of file diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/SubMenuItemAccessRepository.java b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/SubMenuItemAccessRepository.java index 45e446f..fbc6564 100644 --- a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/SubMenuItemAccessRepository.java +++ b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/SubMenuItemAccessRepository.java @@ -20,9 +20,13 @@ public interface SubMenuItemAccessRepository extends JpaRepository findByUserGroupID(@Param("usergroup_id") String usergroup_id); @Query(value = "SELECT * FROM `submenuitem_access` WHERE (`usergroup_id`=:usergroup_id AND `module_id`=:module_id AND `menuitem_id`=:menuitem_id) AND (`isactive`=1 AND `isdelete`=0)", nativeQuery = true) List findByUserGroupIDAccess(@Param("usergroup_id") String usergroup_id,@Param("module_id") String module_id,@Param("menuitem_id") String menuitem_id); + + @Query(value = "SELECT * FROM `submenuitem_access` WHERE (`usergroup_id`=:usergroup_id AND `module_id`=:module_id AND `menuitem_id`=:menuitem_id AND `submenuitem_id`=:submenuitem_id) AND (`isactive`=1 AND `isdelete`=0) LIMIT 0,1", nativeQuery = true) + List findByAll(@Param("usergroup_id") String usergroup_id,@Param("module_id") String module_id,@Param("menuitem_id") String menuitem_id,@Param("submenuitem_id") String submenuitem_id); + } \ No newline at end of file diff --git a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/SubMenuItemRepository.java b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/SubMenuItemRepository.java index 9f18e88..882b02d 100644 --- a/src/main/java/in/gov/chennaicorporation/gccoffice/repository/SubMenuItemRepository.java +++ b/src/main/java/in/gov/chennaicorporation/gccoffice/repository/SubMenuItemRepository.java @@ -9,6 +9,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import in.gov.chennaicorporation.gccoffice.entity.MenuItemEntity; import in.gov.chennaicorporation.gccoffice.entity.SubMenuItemEntity; @Repository @@ -26,4 +27,7 @@ public interface SubMenuItemRepository extends JpaRepository getSubMenuItemByMenuItemIdAccess(@Param("menuitem_id") int menuitem_id,String[] checkSubMenuid); + @Query(value = "SELECT * FROM `submenuitem` WHERE (`url`=:url) AND (`isactive`=1 AND `isdelete`=0) LIMIT 0,1", nativeQuery = true) + List findByUrl(@Param("url") String url); + } \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 4e2a10e..5786757 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -30,7 +30,7 @@ file.upload.directory=${user.dir}/gccoffice_uploads server.address=0.0.0.0 -server.servlet.session.timeout: 30m +server.servlet.session.timeout: 5m server.servlet.session.cookie.name: MYSESSIONID -server.servlet.session.cookie.max-age: 1800s +server.servlet.session.cookie.max-age: 10m diff --git a/src/main/resources/static/assets/.DS_Store b/src/main/resources/static/assets/.DS_Store index fa835cb..e3f4180 100644 Binary files a/src/main/resources/static/assets/.DS_Store and b/src/main/resources/static/assets/.DS_Store differ diff --git a/src/main/resources/static/assets/images/403.png b/src/main/resources/static/assets/images/403.png new file mode 100644 index 0000000..2d2a90e Binary files /dev/null and b/src/main/resources/static/assets/images/403.png differ diff --git a/src/main/resources/templates/error-403.html b/src/main/resources/templates/error-403.html new file mode 100644 index 0000000..171394e --- /dev/null +++ b/src/main/resources/templates/error-403.html @@ -0,0 +1,57 @@ + + + + + + + +
+
+
+
+
+
+ +
+
+
+
+
+ Greater Chennai Corporation +
+

Greater Chennai Corporation

+ +
+
+

+ 403 Error +

+

+ 403 - Access Denied +

+

+ Oops, You don`t have permission to access this page. +

+ + Back + +
+
+ +
+
+
+
+
+ + + + + diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 008472a..1ce6d56 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -87,42 +87,6 @@
- +