10分钟搞定Java带token验证的注册登录

这是spring boot框架下的登录注册功能,并且带有token验证,可以用于生产环境的实例

原理太简单,直接上代码,让你知道什么叫拿来主义!!


1,java中项目介绍

10分钟搞定Java带token验证的注册登录_第1张图片


 2,resources 中的内容

10分钟搞定Java带token验证的注册登录_第2张图片

3,用法:
创建好所有的需要的类,,数据库中创建好需要的数据库,代码复制粘贴,启动,就可以用了


实际代码:
pom.xml
[java]  view plain  copy
  1. "1.0" encoding="UTF-8"?>  
  2. "http://maven.apache.org/POM/4.0.0"  
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  5.     4.0.0  
  6.   
  7.     com.test  
  8.     loginDemo  
  9.     1.0-SNAPSHOT  
  10.     jar  
  11.   
  12.       
  13.         org.springframework.boot  
  14.         spring-boot-starter-parent  
  15.         1.5.3.RELEASE  
  16.            
  17.       
  18.   
  19.       
  20.         UTF-8  
  21.         UTF-8  
  22.         1.8  
  23.         2.6.1  
  24.         0.7.0  
  25.         1.4.1-rc.7  
  26.         1.26.0-rc.3  
  27.         3.0.3  
  28.         2.19.1  
  29.         1.0.0-beta2  
  30.   
  31.       
  32.   
  33.       
  34.           
  35.             org.springframework.boot  
  36.             spring-boot-starter-data-jpa  
  37.           
  38.           
  39.             org.springframework.boot  
  40.             spring-boot-starter-security  
  41.           
  42.           
  43.             org.projectlombok  
  44.             lombok  
  45.           
  46.           
  47.             org.springframework.boot  
  48.             spring-boot-starter-web  
  49.               
  50.                   
  51.                     org.springframework.boot  
  52.                     spring-boot-starter-tomcat  
  53.                   
  54.               
  55.           
  56.           
  57.             org.springframework.boot  
  58.             spring-boot-starter-undertow  
  59.           
  60.   
  61.           
  62.             com.zaxxer  
  63.             HikariCP  
  64.             ${hikaricp.version}  
  65.           
  66.   
  67.           
  68.             com.google.guava  
  69.             guava  
  70.             21.0  
  71.           
  72.   
  73.           
  74.             io.jsonwebtoken  
  75.             jjwt  
  76.             ${jjwt.version}  
  77.           
  78.   
  79.           
  80.             mysql  
  81.             mysql-connector-java  
  82.             runtime  
  83.           
  84.   
  85.           
  86.             org.springframework.boot  
  87.             spring-boot-starter-test  
  88.             test  
  89.           
  90.           
  91.             com.h2database  
  92.             h2  
  93.             1.4.194  
  94.             test  
  95.           
  96.           
  97.             net.serenity-bdd  
  98.             serenity-core  
  99.             ${serenity.version}  
  100.             test  
  101.           
  102.           
  103.             net.serenity-bdd  
  104.             serenity-junit  
  105.             ${serenity.version}  
  106.             test  
  107.           
  108.           
  109.             net.serenity-bdd  
  110.             serenity-jbehave  
  111.             ${serenity.jbehave.version}  
  112.             test  
  113.           
  114.           
  115.             net.serenity-bdd  
  116.             serenity-rest-assured  
  117.             ${serenity.version}  
  118.             test  
  119.           
  120.           
  121.             io.rest-assured  
  122.             spring-mock-mvc  
  123.             ${rest-assured.version}  
  124.             test  
  125.           
  126.           
  127.             net.serenity-bdd  
  128.             serenity-spring  
  129.             ${serenity.version}  
  130.             test  
  131.           
  132.           
  133.             org.apache.commons  
  134.             commons-lang3  
  135.             3.6  
  136.           
  137.           
  138.             junit  
  139.             junit  
  140.             3.8.1  
  141.             test  
  142.           
  143.           
  144.             com.google.code.gson  
  145.             gson  
  146.           
  147.           
  148.             com.alibaba  
  149.             dubbo  
  150.             2.5.3  
  151.           
  152.   
  153.           
  154.             io.dubbo.springboot  
  155.             spring-boot-starter-dubbo  
  156.             1.0.0  
  157.           
  158.   
  159.   
  160.           
  161.             org.codehaus.groovy  
  162.             groovy  
  163.           
  164.           
  165.             org.codehaus.groovy  
  166.             groovy-all  
  167.           
  168.   
  169.           
  170.             junit  
  171.             junit  
  172.           
  173.           
  174.             org.springframework  
  175.             spring-test  
  176.             4.3.8.RELEASE  
  177.           
  178.           
  179.             org.springframework.boot  
  180.             spring-boot-test  
  181.           
  182.           
  183.             io.rest-assured  
  184.             spring-mock-mvc  
  185.             3.0.3  
  186.           
  187.           
  188.             net.serenity-bdd  
  189.             serenity-jbehave  
  190.             1.26.0-rc.3  
  191.           
  192.           
  193.             net.serenity-bdd  
  194.             serenity-core  
  195.             1.4.1-rc.7  
  196.           
  197.           
  198.             org.projectlombok  
  199.             lombok  
  200.             1.16.14  
  201.           
  202.   
  203.       
  204.       
  205.         data-share  
  206.           
  207.               
  208.                 org.apache.maven.plugins  
  209.                 maven-compiler-plugin  
  210.                   
  211.                     1.8  
  212.                     1.8  
  213.                   
  214.               
  215.               
  216.                 org.springframework.boot  
  217.                 spring-boot-maven-plugin  
  218.                   
  219.                     true  
  220.                   
  221.               
  222.               
  223.                 org.apache.maven.plugins  
  224.                 maven-surefire-plugin  
  225.                 ${maven-surefire-plugin.version}  
  226.                   
  227.                     true  
  228.                   
  229.               
  230.               
  231.                 net.serenity-bdd.maven.plugins  
  232.                 serenity-maven-plugin  
  233.                 ${serenity.version}  
  234.                   
  235.                       
  236.                         serenity-reports  
  237.                         post-integration-test  
  238.                           
  239.                             aggregate  
  240.                           
  241.                       
  242.                   
  243.               
  244.           
  245.       
  246.   
auth / AuthError.java

[java]  view plain  copy
  1. package com.test.auth;  
  2.   
  3. import com.fasterxml.jackson.databind.ObjectMapper;  
  4. import org.springframework.security.access.AccessDeniedException;  
  5. import org.springframework.security.core.AuthenticationException;  
  6. import org.springframework.security.web.AuthenticationEntryPoint;  
  7. import org.springframework.security.web.access.AccessDeniedHandler;  
  8. import org.springframework.stereotype.Component;  
  9.   
  10. import javax.servlet.ServletException;  
  11. import javax.servlet.http.HttpServletRequest;  
  12. import javax.servlet.http.HttpServletResponse;  
  13. import java.io.IOException;  
  14.   
  15. import static com.test.data.RestResp.fail;  
  16. import static javax.servlet.http.HttpServletResponse.SC_FORBIDDEN;  
  17. import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;  
  18.   
  19.   
  20. @Component  
  21. public class AuthError implements AuthenticationEntryPoint, AccessDeniedHandler {  
  22.   
  23.     @Override  
  24.     public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {  
  25.         handleAccessDenied(request, response, authException);  
  26.     }  
  27.   
  28.     private static void handleAccessDenied(HttpServletRequest request, HttpServletResponse response, Exception exception) throws IOException, ServletException {  
  29.         response.setStatus(SC_FORBIDDEN);  
  30.         response.setContentType(APPLICATION_JSON_VALUE);  
  31.   
  32.         String message = "authentication error: ";  
  33.         if (exception.getCause() != null) {  
  34.             message += exception  
  35.                     .getCause()  
  36.                     .getMessage();  
  37.         } else {  
  38.             message += exception.getMessage();  
  39.         }  
  40.         byte[] body = new ObjectMapper().writeValueAsBytes(fail(message));  
  41.         response  
  42.                 .getOutputStream()  
  43.                 .write(body);  
  44.   
  45.     }  
  46.   
  47.     @Override  
  48.     public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {  
  49.         handleAccessDenied(request, response, accessDeniedException);  
  50.     }  
  51. }  

auth /JwtAuthentication.java

[java]  view plain  copy
  1. package com.test.auth;  
  2.   
  3. import com.test.domain.User;  
  4. import org.springframework.security.core.Authentication;  
  5. import org.springframework.security.core.GrantedAuthority;  
  6.   
  7. import java.util.Collection;  
  8. import java.util.Map;  
  9. import java.util.Optional;  
  10.   
  11. import static java.util.Collections.emptyList;  
  12.   
  13.   
  14. public class JwtAuthentication implements Authentication {  
  15.   
  16.     private String token;  
  17.     private User user;  
  18.     private Map details;  
  19.   
  20.     JwtAuthentication(User user, String token, Map details){  
  21.         this.token = token;  
  22.         this.user = user;  
  23.         this.details = details;  
  24.     }  
  25.   
  26.     public Optional user(){  
  27.         return Optional.ofNullable(user);  
  28.     }  
  29.   
  30.   
  31.     @Override  
  32.     public Collectionextends GrantedAuthority> getAuthorities() {  
  33.         return emptyList();  
  34.     }  
  35.   
  36.     @Override  
  37.     public Object getCredentials() {  
  38.         return token;  
  39.     }  
  40.   
  41.     @Override  
  42.     public Object getDetails() {  
  43.         return details;  
  44.     }  
  45.   
  46.     @Override  
  47.     public Object getPrincipal() {  
  48.         return user;  
  49.     }  
  50.   
  51.     @Override  
  52.     public boolean isAuthenticated() {  
  53.         return user != null && user.getName() != null && user.getMobile() != null;  
  54.     }  
  55.   
  56.     @Override  
  57.     public void setAuthenticated(boolean b) throws IllegalArgumentException {  
  58.         if (!isAuthenticated()){  
  59.             user = null;  
  60.         }  
  61.     }  
  62.   
  63.     @Override  
  64.     public String getName() {  
  65.         return user.getName();  
  66.     }  
  67.   
  68.     @Override  
  69.     public String toString() {  
  70.         return token;  
  71.     }  
  72. }  

auth /JwtAuthenticationProvider.java

[java]  view plain  copy
  1. package com.test.auth;  
  2.   
  3.   
  4. import org.springframework.security.authentication.AuthenticationProvider;  
  5. import org.springframework.security.core.Authentication;  
  6. import org.springframework.security.core.AuthenticationException;  
  7. import org.springframework.stereotype.Component;  
  8.   
  9.   
  10. @Component  
  11. public class JwtAuthenticationProvider implements AuthenticationProvider {  
  12.   
  13.     @Override  
  14.     public Authentication authenticate(Authentication authentication) throws AuthenticationException {  
  15.         if (authentication != null) {  
  16.             authentication.setAuthenticated((authentication.getPrincipal() != null));  
  17.         }  
  18.         return authentication;  
  19.     }  
  20.   
  21.     @Override  
  22.     public boolean supports(Class authentication) {  
  23.         return authentication.isAssignableFrom(JwtAuthentication.class);  
  24.     }  
  25.   
  26. }  

auth /JwtService.java

[java]  view plain  copy
  1. package com.test.auth;  
  2.   
  3. import com.test.data.UserRepo;  
  4. import com.test.domain.User;  
  5.   
  6. import io.jsonwebtoken.Claims;  
  7. import io.jsonwebtoken.Jws;  
  8. import io.jsonwebtoken.SignatureAlgorithm;  
  9. import io.jsonwebtoken.impl.DefaultJwtBuilder;  
  10. import io.jsonwebtoken.impl.DefaultJwtParser;  
  11. import org.slf4j.Logger;  
  12. import org.slf4j.LoggerFactory;  
  13. import org.springframework.beans.factory.annotation.Autowired;  
  14. import org.springframework.beans.factory.annotation.Value;  
  15. import org.springframework.core.io.ClassPathResource;  
  16. import org.springframework.stereotype.Service;  
  17.   
  18. import javax.annotation.PostConstruct;  
  19. import java.security.KeyStore;  
  20. import java.security.PrivateKey;  
  21. import java.security.PublicKey;  
  22. import java.security.cert.CertificateFactory;  
  23. import java.security.cert.X509Certificate;  
  24. import java.security.interfaces.ECPrivateKey;  
  25. import java.time.ZonedDateTime;  
  26. import java.util.Date;  
  27. import java.util.Optional;  
  28. import java.util.UUID;  
  29.   
  30. import static java.util.Optional.empty;  
  31.   
  32.   
  33. @Service  
  34. public class JwtService {  
  35.   
  36.     private Logger LOG = LoggerFactory.getLogger(getClass());  
  37.   
  38.     @Value("${jwt.key.store}"private String keystore;  
  39.     @Value("${jwt.key.pass}"private String keypass;  
  40.     @Value("${jwt.key.alias}"private String keyalias;  
  41.     @Value("${jwt.cert}"private String cert;  
  42.   
  43.     private UserRepo userRepo;  
  44.     private PrivateKey privateKey;  
  45.     private PublicKey publicKey;  
  46.   
  47.     public JwtService(@Autowired UserRepo userRepo){  
  48.         this.userRepo = userRepo;  
  49.     }  
  50.   
  51.     @PostConstruct  
  52.     private void init() throws Exception {  
  53.         char[] pass = keypass.toCharArray();  
  54.         KeyStore from = KeyStore.getInstance("JKS""SUN");  
  55.         from.load(new ClassPathResource(keystore).getInputStream(), pass);  
  56.         privateKey = (ECPrivateKey) from.getKey(keyalias, pass);  
  57.   
  58.         CertificateFactory certificatefactory = CertificateFactory.getInstance("X.509");  
  59.         X509Certificate x509Cert = (X509Certificate) certificatefactory.generateCertificate(new ClassPathResource(cert).getInputStream());  
  60.         publicKey = x509Cert.getPublicKey();  
  61.     }  
  62.   
  63.     public String generate(User user){  
  64.         return new DefaultJwtBuilder()  
  65.                 .setId(UUID.randomUUID().toString())  
  66.                 .setSubject(user.getName())  
  67.                 .setExpiration(Date.from(ZonedDateTime.now().plusWeeks(1).toInstant()))  
  68.                 .signWith(SignatureAlgorithm.ES256, privateKey).compact();  
  69.     }  
  70.   
  71.     Optional parse(String token){  
  72.         try {  
  73.             Jws jws = new DefaultJwtParser().setSigningKey(publicKey).parseClaimsJws(token);  
  74.             Claims claims = jws.getBody();  
  75.             return userRepo.findByName(claims.getSubject()).map(u -> new JwtAuthentication(u, token, claims));  
  76.         }catch (Exception e){  
  77.             LOG.error("failed to parse jwt token {}", token, e);  
  78.         }  
  79.         return empty();  
  80.     }  
  81. }  

auth /JwtTokenFilter.java

[java]  view plain  copy
  1. package com.test.auth;  
  2.   
  3. import org.springframework.beans.factory.annotation.Autowired;  
  4. import org.springframework.security.core.context.SecurityContextHolder;  
  5. import org.springframework.stereotype.Component;  
  6.   
  7. import javax.annotation.Resource;  
  8. import javax.servlet.*;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import java.io.IOException;  
  11.   
  12.   
  13. @Component  
  14. public class JwtTokenFilter implements Filter {  
  15.   
  16.     private JwtService jwtService;  
  17.   
  18.     public JwtTokenFilter(@Autowired JwtService jwtService){  
  19.         this.jwtService = jwtService;  
  20.     }  
  21.   
  22.     @Override  
  23.     public void init(FilterConfig filterConfig) throws ServletException {  
  24.     }  
  25.   
  26.     @Override  
  27.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {  
  28.         HttpServletRequest servletRequest = (HttpServletRequest) request;  
  29.         String authorization = servletRequest.getHeader("Authorization");  
  30.         if (authorization != null && authorization.startsWith("Bearer ")) {  
  31.             jwtService  
  32.               .parse(authorization.replaceAll("Bearer """))  
  33.               .ifPresent(jwtAuthentication -> SecurityContextHolder  
  34.                 .getContext()  
  35.                 .setAuthentication(jwtAuthentication));  
  36.         }  
  37.         chain.doFilter(request, response);  
  38.     }  
  39.   
  40.     @Override  
  41.     public void destroy() {  
  42.     }  
  43. }  

data / RestResp.java

[java]  view plain  copy
  1. package com.test.data;  
  2.   
  3.   
  4. public class RestResp {  
  5.   
  6.     public final int status;  
  7.     public final String message;  
  8.     public final Object data;  
  9.   
  10.     private RestResp(int status, String message, Object data) {  
  11.         this.status = status;  
  12.         this.message = message;  
  13.         this.data = data;  
  14.     }  
  15.   
  16.     private RestResp(int status, String messsage) {  
  17.         this(status, messsage, null);  
  18.     }  
  19.   
  20.     public static RestResp success(Object data) {  
  21.         return new RestResp(1"success", data);  
  22.     }  
  23.   
  24.     public static RestResp success(String message, Object data){  
  25.         return new RestResp(1, message, data);  
  26.     }  
  27.   
  28.     public static RestResp fail(String message, Object data){  
  29.         return new RestResp(-1, message, data);  
  30.     }  
  31.   
  32.     public static RestResp fail(String message){  
  33.         return new RestResp(-1, message);  
  34.     }  
  35.   
  36.     public static RestResp fail(){  
  37.         return new RestResp(-1"fail");  
  38.     }  
  39.   
  40. }  

data /UserRepo.java

[java]  view plain  copy
  1. package com.test.data;  
  2.   
  3. import com.test.domain.User;  
  4. import org.springframework.data.repository.CrudRepository;  
  5. import org.springframework.stereotype.Component;  
  6. import org.springframework.stereotype.Repository;  
  7.   
  8. import java.util.Optional;  
  9.   
  10. /** 
  11.  * Created by Luo_xuri on 2017/9/29. 
  12.  */  
  13. @Repository  
  14. public interface UserRepo extends CrudRepository {  
  15.   
  16.     Optional findByName(String userName);  
  17.     Optional findByNameAndPassword(String userName, String password);  
  18. }  
data /UserTokenRepo.java

[java]  view plain  copy
  1. package com.test.data;  
  2.   
  3. import com.test.domain.UserToken;  
  4. import org.springframework.data.repository.CrudRepository;  
  5. import org.springframework.stereotype.Repository;  
  6.   
  7.   
  8. @Repository  
  9. public interface UserTokenRepo extends CrudRepository {  
  10. }  

domain / NameAndPass.java

[java]  view plain  copy
  1. package com.test.domain;  
  2.   
  3. /** 
  4.  * Created by Luo_xuri on 2017/9/30. 
  5.  */  
  6. public class NameAndPass {  
  7.   
  8.     private String username;  
  9.     private String password;  
  10.   
  11.     public void setUsername(String username) {  
  12.         this.username = username;  
  13.     }  
  14.   
  15.     public String getUsername() {  
  16.         return username;  
  17.     }  
  18.   
  19.     public void setPassword(String password) {  
  20.         this.password = password;  
  21.     }  
  22.   
  23.     public String getPassword() {  
  24.         return password;  
  25.     }  
  26. }  

domain /User.java

[java]  view plain  copy
  1. package com.test.domain;  
  2.   
  3. import com.fasterxml.jackson.annotation.JsonIgnore;  
  4.   
  5. import javax.persistence.*;  
  6. import java.util.HashSet;  
  7. import java.util.Set;  
  8.   
  9.   
  10. @Entity  
  11. @Table(name = "user", uniqueConstraints = @UniqueConstraint(columnNames = {"name"})) // 唯一约束name  
  12. public class User {  
  13.   
  14.     @Id  
  15.     @GeneratedValue(strategy = GenerationType.AUTO)  
  16.     private Long id;  
  17.   
  18.     private String mobile;  
  19.     private String password;  
  20.   
  21.     private String name;  
  22.   
  23.     @JsonIgnore  
  24.     @Transient  
  25.     private Set authorities = new HashSet<>();  
  26.   
  27.     public User() {  
  28.     }  
  29.   
  30.     public User(String phone, String password) {  
  31.         this.mobile = phone;  
  32.         this.password = password;  
  33.     }  
  34.   
  35.     public Long getId() {  
  36.         return id;  
  37.     }  
  38.   
  39.     public void setId(Long id) {  
  40.         this.id = id;  
  41.     }  
  42.   
  43.     public void setAuthorities(Set authorities) {  
  44.         this.authorities = authorities;  
  45.     }  
  46.   
  47.     public Set getAuthorities() {  
  48.         return authorities;  
  49.     }  
  50.   
  51.     public String getName() {  
  52.         return name;  
  53.     }  
  54.   
  55.     public void setName(String name) {  
  56.         this.name = name;  
  57.     }  
  58.   
  59.     public String getMobile() {  
  60.         return mobile;  
  61.     }  
  62.   
  63.     public void setMobile(String mobile) {  
  64.         this.mobile = mobile;  
  65.     }  
  66.   
  67.     public String getPassword() {  
  68.         return password;  
  69.     }  
  70.   
  71.     public void setPassword(String password) {  
  72.         this.password = password;  
  73.     }  
  74.   
  75.     public String toString() {  
  76.         return String.format("%s(%s)", name, mobile);  
  77.     }  
  78.   
  79. }  

domain /UserToken.java

[java]  view plain  copy
  1. package com.test.domain;  
  2.   
  3. import com.fasterxml.jackson.annotation.JsonFormat;  
  4. import com.fasterxml.jackson.annotation.JsonIgnore;  
  5. import lombok.Data;  
  6. import lombok.NoArgsConstructor;  
  7.   
  8. import javax.annotation.sql.DataSourceDefinition;  
  9. import javax.persistence.*;  
  10. import java.util.Date;  
  11.   
  12.   
  13. @Entity  
  14. @Table(name = "user_token")  
  15. @Data  
  16. @NoArgsConstructor  
  17. public class UserToken {  
  18.   
  19.     @JsonIgnore  
  20.     @Id  
  21.     @GeneratedValue(strategy = GenerationType.AUTO)  
  22.     private Long id;  
  23.   
  24.     @Column(length = 512)  
  25.     private String token;  
  26.   
  27.     @JsonFormat(pattern = "yy-MM-dd hh:mm:ss")  
  28.     private Date createtime = new Date();  
  29.   
  30.     public UserToken(String token){  
  31.         this.token = token;  
  32.     }  
  33. }  

rest / TokenController.java

[java]  view plain  copy
  1. package com.test.rest;  
  2.   
  3. import com.test.auth.JwtService;  
  4. import com.test.data.RestResp;  
  5. import com.test.data.UserRepo;  
  6. import com.test.data.UserTokenRepo;  
  7. import com.test.domain.NameAndPass;  
  8. import com.test.domain.UserToken;  
  9. import lombok.extern.slf4j.Slf4j;  
  10. import org.springframework.web.bind.annotation.PostMapping;  
  11. import org.springframework.web.bind.annotation.RequestBody;  
  12. import org.springframework.web.bind.annotation.RequestMapping;  
  13. import org.springframework.web.bind.annotation.RestController;  
  14.   
  15. import javax.annotation.Resource;  
  16.   
  17.   
  18. @Slf4j  
  19. @RestController  
  20. @RequestMapping("/token")  
  21. public class TokenController {  
  22.   
  23.   
  24.     @Resource  
  25.     private UserRepo userRepo;  
  26.     @Resource  
  27.     private JwtService jwtService;  
  28.     @Resource  
  29.     private UserTokenRepo userTokenRepo;  
  30.   
  31.     @PostMapping  
  32.     public RestResp enroll(@RequestBody NameAndPass user){  
  33.         return userRepo.findByNameAndPassword(user.getUsername(), user.getPassword()).map(u -> {  
  34.            UserToken userToken = new UserToken(jwtService.generate(u));  
  35.            log.info("{} enrolled", user.getUsername());  
  36.            userToken = userTokenRepo.save(userToken);  
  37.            return RestResp.success(userToken);  
  38.         }).orElse(RestResp.fail());  
  39.   
  40.     }  
  41. }  

rest /UserController.java

[java]  view plain  copy
  1. package com.test.rest;  
  2.   
  3. import com.test.data.RestResp;  
  4. import com.test.data.UserRepo;  
  5. import com.test.domain.User;  
  6. import org.slf4j.Logger;  
  7. import org.slf4j.LoggerFactory;  
  8. import org.springframework.web.bind.annotation.PostMapping;  
  9. import org.springframework.web.bind.annotation.RequestBody;  
  10. import org.springframework.web.bind.annotation.RequestMapping;  
  11. import org.springframework.web.bind.annotation.RestController;  
  12.   
  13. import javax.annotation.Resource;  
  14. import java.util.Optional;  
  15.   
  16.   
  17. @RestController  
  18. @RequestMapping("/user")  
  19. public class UserController {  
  20.   
  21.     private Logger LOG = LoggerFactory.getLogger(getClass());  
  22.   
  23.     @Resource  
  24.     private UserRepo userRepo;  
  25.   
  26.     @PostMapping("/register")  
  27.     public RestResp register(@RequestBody User user){  
  28.         return userRepo.findByName(user.getName()).map(u -> RestResp.fail()).orElseGet(() -> {  
  29.            User u = userRepo.save(user);  
  30.            LOG.info("{} registered", u);  
  31.            return RestResp.success("注册成功");  
  32.         });  
  33.     }  
  34. }  

AppConfiguration.java

[java]  view plain  copy
  1. package com.test;  
  2.   
  3. import com.test.auth.AuthError;  
  4. import com.test.auth.JwtAuthenticationProvider;  
  5. import com.test.auth.JwtTokenFilter;  
  6. import org.springframework.beans.factory.annotation.Configurable;  
  7. import org.springframework.context.annotation.Bean;  
  8. import org.springframework.http.HttpMethod;  
  9. import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;  
  10. import org.springframework.security.config.annotation.web.builders.HttpSecurity;  
  11. import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;  
  12. import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;  
  13. import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;  
  14. import org.springframework.web.servlet.config.annotation.CorsRegistry;  
  15. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;  
  16. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;  
  17.   
  18. import javax.annotation.Resource;  
  19.   
  20. import static org.springframework.http.HttpMethod.POST;  
  21.   
  22.   
  23. @EnableWebSecurity  
  24. @Configurable  
  25. public class AppConfiguration extends WebSecurityConfigurerAdapter {  
  26.   
  27.     @Resource  
  28.     private JwtTokenFilter jwtTokenFilter;  
  29.   
  30.     @Resource  
  31.     private JwtAuthenticationProvider jwtAuthenticationProvider;  
  32.   
  33.     @Resource  
  34.     private AuthError authError;  
  35.   
  36.     @Override  
  37.     protected void configure(HttpSecurity http) throws Exception {  
  38.         http  
  39.                 .cors()  
  40.                 .and()  
  41.                 .csrf()  
  42.                 .disable()  
  43.                 .authorizeRequests()  
  44.                 .antMatchers(POST ,"/user/register""/token"// 不拦截  
  45.                 .permitAll().antMatchers("/**/*"// 允许拦截  
  46.                 .authenticated()  
  47.                 .and()  
  48.                 .addFilterBefore(jwtTokenFilter, UsernamePasswordAuthenticationFilter.class)  
  49.                 .exceptionHandling()  
  50.                 .authenticationEntryPoint(authError)  
  51.                 .accessDeniedHandler(authError);  
  52.     }  
  53.   
  54.     @Override  
  55.     protected void configure(AuthenticationManagerBuilder auth) throws Exception {  
  56.         auth.authenticationProvider(jwtAuthenticationProvider);  
  57.     }  
  58.   
  59.     /** 
  60.      * allow cross origin requests 
  61.      * 跨域相关,请百度 
  62.      */  
  63.     @Bean  
  64.     public WebMvcConfigurer corsConfigurer() {  
  65.         return new WebMvcConfigurerAdapter() {  
  66.             @Override  
  67.             public void addCorsMappings(CorsRegistry registry) {  
  68.                 registry  
  69.                         .addMapping("/**")  
  70.                         .allowedOrigins("*")  
  71.                         .allowedMethods("GET""POST""PUT""OPTIONS""DELETE")  
  72.                         .allowedHeaders("*");  
  73.             }  
  74.         };  
  75.     }  
  76. }  

Application.java

[java]  view plain  copy
  1. package com.test;  
  2.   
  3. import org.springframework.boot.SpringApplication;  
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;  
  5. import org.springframework.scheduling.annotation.EnableScheduling;  
  6.   
  7. @SpringBootApplication  
  8. @EnableScheduling  
  9. public class Application {  
  10.   
  11.     public static void main(String[] args) {  
  12.         SpringApplication.run(Application.class, args);  
  13.     }  
  14. }  

resources/ security   # 这是文件夹
oxcc.cer
oxcc.jks
上面两个是什么鬼,如果你不知道就百度一下
resources/ application.properties
[java]  view plain  copy
  1. spring.freemarker.enabled=false  
  2. spring.freemarker.checkTemplateLocation=false  
  3.   
  4. server.port=8686  
  5.   
  6. spring.datasource.url=jdbc:mysql://localhost:3306/logindemo?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull  
  7. spring.datasource.username=root  
  8. spring.datasource.password=root  
  9. spring.datasource.driver-class-name=com.mysql.jdbc.Driver  
  10.   
  11. spring.datasource.hikari.connection-timeout=3000  
  12. spring.datasource.hikari.initialization-fail-fast=true  
  13. spring.datasource.hikari.max-lifetime=600000  
  14. spring.datasource.hikari.maximum-pool-size=5  
  15. spring.datasource.hikari.minimum-idle=20000  
  16. spring.datasource.hikari.idle-timeout=300000  
  17.   
  18. spring.jpa.hibernate.ddl-auto=update  
  19. spring.jpa.show-sql=false  
  20.   
  21. jwt.key.store=security/oxcc.jks  
  22. jwt.key.pass=test  
  23. jwt.key.alias=oxkey-cc  
  24. jwt.cert=security/oxcc.cer  

代码直接复制粘贴,可用于生产环境的注册登录就这么简单的完成了!
如果觉得还可以,请点赞!


你可能感兴趣的:(10分钟搞定Java带token验证的注册登录)