Kaynağa Gözat

ADD: captcha controller

guoyc 8 yıl önce
ebeveyn
işleme
af1feddc8a

+ 7 - 0
mooctest-site-server/pom.xml

@@ -129,6 +129,13 @@
         </dependency>
         <!-- Mail dependency end -->
 
+        <!-- kaptcha verification code -->
+        <dependency>
+            <groupId>com.github.penggle</groupId>
+            <artifactId>kaptcha</artifactId>
+            <version>2.3.2</version>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 34 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/CaptchaConfiguration.java

@@ -0,0 +1,34 @@
+package cn.iselab.mooctest.site.configure;
+
+import com.google.code.kaptcha.Constants;
+import com.google.code.kaptcha.impl.DefaultKaptcha;
+import com.google.code.kaptcha.util.Config;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.Properties;
+
+/**
+ * @author sean
+ * @date 2017-03-21.
+ */
+@Configuration
+public class CaptchaConfiguration {
+
+    @Bean
+    public DefaultKaptcha getKaptchaBean() {
+        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
+        Properties properties = new Properties();
+        properties.setProperty(Constants.KAPTCHA_BORDER, "yes");
+        properties.setProperty(Constants.KAPTCHA_BORDER_COLOR, "105,179,90");
+        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_COLOR, "blue");
+        properties.setProperty(Constants.KAPTCHA_IMAGE_WIDTH, "125");
+        properties.setProperty(Constants.KAPTCHA_IMAGE_HEIGHT, "45");
+        properties.setProperty(Constants.KAPTCHA_SESSION_KEY, "code");
+        properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "6");
+        Config config = new Config(properties);
+        defaultKaptcha.setConfig(config);
+        return defaultKaptcha;
+    }
+
+}

+ 30 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/FilterConfiguration.java

@@ -6,10 +6,14 @@ import cn.iselab.mooctest.site.web.filter.AdminAuthFilter;
 import cn.iselab.mooctest.site.web.filter.AuthFilter;
 import cn.iselab.mooctest.site.web.filter.ManagerAuthFilter;
 import cn.iselab.mooctest.site.web.filter.WorkerAuthFilter;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.context.embedded.FilterRegistrationBean;
+import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+import java.util.List;
+
 /**
  * @author sean
  * @date 2017-03-18.
@@ -17,14 +21,25 @@ import org.springframework.context.annotation.Configuration;
 @Configuration
 public class FilterConfiguration {
 
+    @Bean(name = "authFilterConfig")
+    @ConfigurationProperties(prefix = "auth")
+    public FilterConfig createAuthFilterConfig() {
+        return new FilterConfig();
+    }
+
     @Bean
-    public FilterRegistrationBean registerAuthFilter(AuthFilter authFilter) {
+    public FilterRegistrationBean registerAuthFilter(AuthFilter authFilter,
+                                                     @Qualifier("authFilterConfig") FilterConfig filterConfig) {
+
+        authFilter.setEscapeUrls(filterConfig.getEscapeUrls());
+
         FilterRegistrationBean bean = new FilterRegistrationBean(authFilter);
         bean.addUrlPatterns(UrlConstants.API_WORKER + "*");
         bean.addUrlPatterns(UrlConstants.API_COMMON + "*");
         bean.addUrlPatterns(UrlConstants.API_MANAGER + "*");
         bean.addUrlPatterns(UrlConstants.API_ADMIN + "*");
         bean.setOrder(FilterConsts.ORDER_AUTH);
+
         return bean;
     }
 
@@ -54,5 +69,19 @@ public class FilterConfiguration {
         bean.setOrder(FilterConsts.ORDER_AUTH_ADMIN);
         return bean;
     }
+
+    private class FilterConfig {
+
+        private List<String> escapeUrls;
+
+        public List<String> getEscapeUrls() {
+            return escapeUrls;
+        }
+
+        public void setEscapeUrls(List<String> escapeUrls) {
+            this.escapeUrls = escapeUrls;
+        }
+    }
+
 }
 

+ 5 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/AccountController.java

@@ -26,4 +26,9 @@ public class AccountController extends BaseController {
         return authLogic.login(accountVO, response);
     }
 
+    @RequestMapping(value = UrlConstants.API_COMMON + "register", method = RequestMethod.POST)
+    public AccountVO register(@RequestBody AccountVO accountVO, HttpServletResponse response) {
+        return authLogic.login(accountVO, response);
+    }
+
 }

+ 60 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/CaptchaController.java

@@ -0,0 +1,60 @@
+package cn.iselab.mooctest.site.web.ctrl;
+
+import cn.iselab.mooctest.site.common.constant.UrlConstants;
+import cn.iselab.mooctest.site.util.data.EncryptionUtil;
+import com.google.code.kaptcha.impl.DefaultKaptcha;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.imageio.ImageIO;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.awt.image.BufferedImage;
+
+/**
+ * @author sean
+ * @date 2017-03-21.
+ */
+@Controller
+public class CaptchaController extends BaseController {
+
+    @Autowired
+    private DefaultKaptcha captchaProducer;
+
+    @RequestMapping(value = UrlConstants.API_COMMON + "captcha")
+    public ModelAndView getKaptchaImage(HttpServletRequest request,
+                                        HttpServletResponse response) throws Exception {
+
+        response.setDateHeader("Expires", 0);
+        response.setHeader("Cache-Control",
+                "no-store, no-cache, must-revalidate");
+        response.addHeader("Cache-Control", "post-check=0, pre-check=0");
+        response.setHeader("Pragma", "no-cache");
+        response.setContentType("image/jpeg");
+
+        String capText = captchaProducer.createText();
+
+        try {
+            Cookie cookie = new Cookie("captchaCode", EncryptionUtil.encryptMD5Hex(capText));
+            response.addCookie(cookie);
+        } catch (Exception e) {
+            LOG.error("", e);
+        }
+
+        BufferedImage bi = captchaProducer.createImage(capText);
+        ServletOutputStream out = response.getOutputStream();
+        ImageIO.write(bi, "jpg", out);
+        try {
+            out.flush();
+        } finally {
+            out.close();
+        }
+        return null;
+
+    }
+
+}

+ 9 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/filter/AuthFilter.java

@@ -1,13 +1,13 @@
 package cn.iselab.mooctest.site.web.filter;
 
 import cn.iselab.mooctest.site.web.constants.AttrConsts;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
 import javax.servlet.*;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -17,8 +17,7 @@ import java.util.List;
 @Component
 public class AuthFilter implements Filter {
 
-    @Value("${auth.escapeUrls}")
-    private List<String> escapeUrls;
+    private List<String> escapeUrls = new ArrayList<>();
 
     @Override
     public void init(FilterConfig filterConfig) throws ServletException {
@@ -54,4 +53,11 @@ public class AuthFilter implements Filter {
 
     }
 
+    public List<String> getEscapeUrls() {
+        return escapeUrls;
+    }
+
+    public void setEscapeUrls(List<String> escapeUrls) {
+        this.escapeUrls = escapeUrls;
+    }
 }

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/AuthLogic.java

@@ -19,4 +19,6 @@ public interface AuthLogic {
 
     AccountVO login(AccountVO accountVO, HttpServletResponse response);
 
+    AccountVO register(AccountVO accountVO, HttpServletResponse response);
+
 }

+ 8 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/AuthLogicImpl.java

@@ -166,6 +166,14 @@ public class AuthLogicImpl implements AuthLogic {
 
     }
 
+    @Override
+    public AccountVO register(AccountVO accountVO, HttpServletResponse response) {
+
+
+
+        return null;
+    }
+
     private AuthResult authWorker(Worker worker, String password) {
 
         AuthResult result = new AuthResult();

+ 3 - 1
mooctest-site-server/src/main/resources/application.yaml

@@ -22,7 +22,9 @@ spring:
     properties.hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
 
 auth:
-    escapeUrls: /api/common/login
+    escapeUrls:
+        - /api/common/login
+        - /api/common/captcha
 
 ---
 # 开发环境