Przeglądaj źródła

1、登录密码全角转半角
2、去掉用户实体最后登录日期和过期日期的注解,初始密码后导致过期日期字段被置空

xusl 1 rok temu
rodzic
commit
ee4a8b54c5

+ 1 - 1
backend/src/main/java/com/jiayue/ssi/entity/SysUser.java

@@ -74,7 +74,7 @@ public class SysUser extends BaseEntity implements UserDetails {
     /**
      * 账号有效期
      */
-    @TableField(value = "exp_date",fill = FieldFill.INSERT_UPDATE)
+//    @TableField(value = "exp_date",fill = FieldFill.INSERT_UPDATE)
     @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
     private Date expDate;
 

+ 1 - 1
backend/src/main/java/com/jiayue/ssi/service/impl/SysUserServiceImpl.java

@@ -140,7 +140,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Transactional(propagation= Propagation.REQUIRED, rollbackFor = Exception.class)
     public boolean resetPassword(Integer id,String initPassword) {
         LambdaUpdateWrapper<SysUser> updateWrapper = new UpdateWrapper<SysUser>().lambda();
-        updateWrapper.eq(SysUser::getId, id).set(SysUser::getLastUpdatePwdTime, null).set(SysUser::getPassword,initPassword);
+        updateWrapper.eq(SysUser::getId, id).set(SysUser::getPassword,initPassword);
         int count = sysUserMapper.update(new SysUser(), updateWrapper);
         if (count > 0) {
             return true;

+ 188 - 0
backend/src/main/java/org/springframework/security/web/authentication/UsernamePasswordAuthenticationFilter.java

@@ -0,0 +1,188 @@
+/*
+ * Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.security.web.authentication;
+
+import cn.hutool.core.convert.Convert;
+import org.springframework.lang.Nullable;
+import org.springframework.security.authentication.AuthenticationServiceException;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
+import org.springframework.util.Assert;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Processes an authentication form submission. Called
+ * {@code AuthenticationProcessingFilter} prior to Spring Security 3.0.
+ * <p>
+ * Login forms must present two parameters to this filter: a username and password. The
+ * default parameter names to use are contained in the static fields
+ * {@link #SPRING_SECURITY_FORM_USERNAME_KEY} and
+ * {@link #SPRING_SECURITY_FORM_PASSWORD_KEY}. The parameter names can also be changed by
+ * setting the {@code usernameParameter} and {@code passwordParameter} properties.
+ * <p>
+ * This filter by default responds to the URL {@code /login}.
+ *
+ * @author Ben Alex
+ * @author Colin Sampaleanu
+ * @author Luke Taylor
+ * @since 3.0
+ */
+public class UsernamePasswordAuthenticationFilter extends
+        AbstractAuthenticationProcessingFilter {
+    // ~ Static fields/initializers
+    // =====================================================================================
+
+    public static final String SPRING_SECURITY_FORM_USERNAME_KEY = "username";
+    public static final String SPRING_SECURITY_FORM_PASSWORD_KEY = "password";
+
+    private String usernameParameter = SPRING_SECURITY_FORM_USERNAME_KEY;
+    private String passwordParameter = SPRING_SECURITY_FORM_PASSWORD_KEY;
+    private boolean postOnly = true;
+
+    // ~ Constructors
+    // ===================================================================================================
+
+    public UsernamePasswordAuthenticationFilter() {
+        super(new AntPathRequestMatcher("/login", "POST"));
+    }
+
+    // ~ Methods
+    // ========================================================================================================
+    @Override
+    public Authentication attemptAuthentication(HttpServletRequest request,
+                                                HttpServletResponse response) throws AuthenticationException {
+        if (postOnly && !request.getMethod().equals("POST")) {
+            throw new AuthenticationServiceException(
+                    "Authentication method not supported: " + request.getMethod());
+        }
+
+        String username = obtainUsername(request);
+        String password = obtainPassword(request);
+
+        if (username == null) {
+            username = "";
+        }
+
+        if (password == null) {
+            password = "";
+        }
+        password = Convert.toDBC(password);
+        username = username.trim();
+
+        UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(
+                username, password);
+
+        // Allow subclasses to set the "details" property
+        setDetails(request, authRequest);
+
+        return this.getAuthenticationManager().authenticate(authRequest);
+    }
+
+    /**
+     * Enables subclasses to override the composition of the password, such as by
+     * including additional values and a separator.
+     * <p>
+     * This might be used for example if a postcode/zipcode was required in addition to
+     * the password. A delimiter such as a pipe (|) should be used to separate the
+     * password and extended value(s). The <code>AuthenticationDao</code> will need to
+     * generate the expected password in a corresponding manner.
+     * </p>
+     *
+     * @param request so that request attributes can be retrieved
+     *
+     * @return the password that will be presented in the <code>Authentication</code>
+     * request token to the <code>AuthenticationManager</code>
+     */
+    @Nullable
+    protected String obtainPassword(HttpServletRequest request) {
+        return request.getParameter(passwordParameter);
+    }
+
+    /**
+     * Enables subclasses to override the composition of the username, such as by
+     * including additional values and a separator.
+     *
+     * @param request so that request attributes can be retrieved
+     *
+     * @return the username that will be presented in the <code>Authentication</code>
+     * request token to the <code>AuthenticationManager</code>
+     */
+    @Nullable
+    protected String obtainUsername(HttpServletRequest request) {
+        return request.getParameter(usernameParameter);
+    }
+
+    /**
+     * Provided so that subclasses may configure what is put into the authentication
+     * request's details property.
+     *
+     * @param request that an authentication request is being created for
+     * @param authRequest the authentication request object that should have its details
+     * set
+     */
+    protected void setDetails(HttpServletRequest request,
+                              UsernamePasswordAuthenticationToken authRequest) {
+        authRequest.setDetails(authenticationDetailsSource.buildDetails(request));
+    }
+
+    /**
+     * Sets the parameter name which will be used to obtain the username from the login
+     * request.
+     *
+     * @param usernameParameter the parameter name. Defaults to "username".
+     */
+    public void setUsernameParameter(String usernameParameter) {
+        Assert.hasText(usernameParameter, "Username parameter must not be empty or null");
+        this.usernameParameter = usernameParameter;
+    }
+
+    /**
+     * Sets the parameter name which will be used to obtain the password from the login
+     * request..
+     *
+     * @param passwordParameter the parameter name. Defaults to "password".
+     */
+    public void setPasswordParameter(String passwordParameter) {
+        Assert.hasText(passwordParameter, "Password parameter must not be empty or null");
+        this.passwordParameter = passwordParameter;
+    }
+
+    /**
+     * Defines whether only HTTP POST requests will be allowed by this filter. If set to
+     * true, and an authentication request is received which is not a POST request, an
+     * exception will be raised immediately and authentication will not be attempted. The
+     * <tt>unsuccessfulAuthentication()</tt> method will be called as if handling a failed
+     * authentication.
+     * <p>
+     * Defaults to <tt>true</tt> but may be overridden by subclasses.
+     */
+    public void setPostOnly(boolean postOnly) {
+        this.postOnly = postOnly;
+    }
+
+    public final String getUsernameParameter() {
+        return usernameParameter;
+    }
+
+    public final String getPasswordParameter() {
+        return passwordParameter;
+    }
+}

+ 6 - 1
backend/src/test/java/com/jiayue/ssi/service/Test.java

@@ -66,6 +66,11 @@ public class Test {
 //        System.out.println(map.get("username"));
 //        System.out.println(map.get("password"));
 
-        System.out.println(SmUtil.sm3("Czp258369").toUpperCase());
+        System.out.println(SmUtil.sm3("+>5u9.@W").toUpperCase());
+
+
+        System.out.println(Convert.toDBC("+>5u9.@W"));
+
+
     }
 }