From fff6e492516e8b3881a0810f8de452fbbe104d27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=E5=98=89=E9=98=B3?= Date: Sat, 21 Jul 2018 10:21:50 +0800 Subject: [PATCH] =?UTF-8?q?Spring=20Boot=20=E8=BF=87=E6=BB=A4=E5=99=A8?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E9=80=9A=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 25 +++++ pom.xml | 56 ++++++++++++ .../springboot/SpringbootApplication.java | 14 +++ .../springboot/constant/LoginCons.java | 11 +++ .../springboot/controller/LoginDemo.java | 81 +++++++++++++++++ .../springboot/filter/LoginFilter.java | 91 +++++++++++++++++++ src/main/resources/application.properties | 0 .../SpringbootApplicationTests.java | 16 ++++ 8 files changed, 294 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/top/fjy8018/springboot/SpringbootApplication.java create mode 100644 src/main/java/top/fjy8018/springboot/constant/LoginCons.java create mode 100644 src/main/java/top/fjy8018/springboot/controller/LoginDemo.java create mode 100644 src/main/java/top/fjy8018/springboot/filter/LoginFilter.java create mode 100644 src/main/resources/application.properties create mode 100644 src/test/java/top/fjy8018/springboot/SpringbootApplicationTests.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..82eca33 --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +/target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/build/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..1d761d3 --- /dev/null +++ b/pom.xml @@ -0,0 +1,56 @@ + + + 4.0.0 + + top.fjy8018 + springboot + 0.0.1-SNAPSHOT + jar + + springboot + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 2.0.3.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.projectlombok + lombok + true + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/src/main/java/top/fjy8018/springboot/SpringbootApplication.java b/src/main/java/top/fjy8018/springboot/SpringbootApplication.java new file mode 100644 index 0000000..6a004ae --- /dev/null +++ b/src/main/java/top/fjy8018/springboot/SpringbootApplication.java @@ -0,0 +1,14 @@ +package top.fjy8018.springboot; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.ServletComponentScan; + +@ServletComponentScan +@SpringBootApplication +public class SpringbootApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringbootApplication.class, args); + } +} diff --git a/src/main/java/top/fjy8018/springboot/constant/LoginCons.java b/src/main/java/top/fjy8018/springboot/constant/LoginCons.java new file mode 100644 index 0000000..45bf433 --- /dev/null +++ b/src/main/java/top/fjy8018/springboot/constant/LoginCons.java @@ -0,0 +1,11 @@ +package top.fjy8018.springboot.constant; + +/** + * @author F嘉阳 + * @date 2018-07-21 09:53 + */ +public interface LoginCons { + String LOGIN_USER_NAME = "admin"; + + String SESSION_ATTRIBUTE = "user"; +} diff --git a/src/main/java/top/fjy8018/springboot/controller/LoginDemo.java b/src/main/java/top/fjy8018/springboot/controller/LoginDemo.java new file mode 100644 index 0000000..148927e --- /dev/null +++ b/src/main/java/top/fjy8018/springboot/controller/LoginDemo.java @@ -0,0 +1,81 @@ +package top.fjy8018.springboot.controller; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import top.fjy8018.springboot.constant.LoginCons; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +/** + * @author F嘉阳 + * @date 2018-07-21 09:48 + */ +@Slf4j +@Controller +public class LoginDemo { + + @Resource + HttpServletRequest request; + + @ResponseBody + @RequestMapping("/loginPage") + public String loginPage() { + return "登录页"; + } + + @RequestMapping("/login") + public String toLogin(@RequestParam String username) { + HttpSession session = request.getSession(); + StringBuilder url = new StringBuilder() + .append("http://") + .append(request.getServerName()) + .append(":") + .append(request.getServerPort()) + .append(request.getContextPath()); + log.info("【toLogin】URL:{}", url); + + if (username.equals(LoginCons.LOGIN_USER_NAME)) { + session.setAttribute(LoginCons.SESSION_ATTRIBUTE, username); + return "redirect:" + url + "/loginsuccess"; + } else { + return "redirect:" + url + "/loginfail"; + } + } + + @RequestMapping("/loginsuccess") + @ResponseBody + public String loginSuccess() { + return "登录成功"; + } + + @RequestMapping("/loginfail") + @ResponseBody + public String loginFail() { + return "登录失败"; + } + + @RequestMapping("/home/index") + @ResponseBody + public String toIndex() { + return "index"; + } + + @RequestMapping("/logout") + public String logout() { + HttpSession session = request.getSession(); + session.removeAttribute(LoginCons.SESSION_ATTRIBUTE); + StringBuilder url = new StringBuilder() + .append("http://") + .append(request.getServerName()) + .append(":") + .append(request.getServerPort()) + .append(request.getContextPath()); + log.info("【logout】用户登出"); + return "redirect:" + url + "/loginPage"; + } +} diff --git a/src/main/java/top/fjy8018/springboot/filter/LoginFilter.java b/src/main/java/top/fjy8018/springboot/filter/LoginFilter.java new file mode 100644 index 0000000..4f2afb7 --- /dev/null +++ b/src/main/java/top/fjy8018/springboot/filter/LoginFilter.java @@ -0,0 +1,91 @@ +package top.fjy8018.springboot.filter; + +import lombok.extern.slf4j.Slf4j; +import top.fjy8018.springboot.constant.LoginCons; + +import javax.servlet.*; +import javax.servlet.annotation.WebFilter; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; + +/** + * @author F嘉阳 + * @date 2018-07-21 09:51 + */ +@Slf4j +@WebFilter(filterName = "sessionFilter", urlPatterns = "/*") +public class LoginFilter implements Filter { + + /** + * 标示符:表示当前用户未登录(可根据自己项目需要改为json样式) + */ + String logout = "您还未登录"; + + /** + * 不需要登录就可以访问的路径(比如:注册登录等) + */ + private String[] includeUrls = new String[]{"/loginPage", "/login", "/loginfail"}; + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + HttpServletRequest request = (HttpServletRequest) servletRequest; + HttpServletResponse response = (HttpServletResponse) servletResponse; + HttpSession session = request.getSession(); + String uri = request.getRequestURI(); + + log.info("【doFilter】filterURI:{}", uri); + + //是否需要过滤 + boolean needFilter = isNeedFilter(uri); + + + //不需要过滤直接传给下一个过滤器 + if (!needFilter) { + filterChain.doFilter(servletRequest, servletResponse); + } else { //需要过滤器 + // session中包含user对象,则是登录状态 + if (session != null && session.getAttribute(LoginCons.SESSION_ATTRIBUTE) != null) { + log.info("【doFilter】user:{}", session.getAttribute(LoginCons.SESSION_ATTRIBUTE)); + filterChain.doFilter(request, response); + } else { + String requestType = request.getHeader("X-Requested-With"); + //判断是否是ajax请求 + if (requestType != null && "XMLHttpRequest".equals(requestType)) { + response.getWriter().write(this.logout); + } else { + //重定向到登录页(需要在static文件夹下建立此html文件) + response.sendRedirect(request.getContextPath() + "/loginPage"); + } + } + } + } + + @Override + public void destroy() { + + } + + /** + * 判断是否需要过滤 + * + * @param uri + * @return + */ + private boolean isNeedFilter(String uri) { + + for (String includeUrl : includeUrls) { + if (includeUrl.equals(uri)) { + return false; + } + } + + return true; + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..e69de29 diff --git a/src/test/java/top/fjy8018/springboot/SpringbootApplicationTests.java b/src/test/java/top/fjy8018/springboot/SpringbootApplicationTests.java new file mode 100644 index 0000000..5bb3dbd --- /dev/null +++ b/src/test/java/top/fjy8018/springboot/SpringbootApplicationTests.java @@ -0,0 +1,16 @@ +package top.fjy8018.springboot; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class SpringbootApplicationTests { + + @Test + public void contextLoads() { + } + +}