caiaa 2 vuotta sitten
vanhempi
sitoutus
3e9659738c

+ 2 - 14
pom.xml

@@ -40,20 +40,8 @@
         </dependency> -->
         <dependency>
             <groupId>io.jsonwebtoken</groupId>
-            <artifactId>jjwt-api</artifactId>
-            <version>0.11.5</version>
-        </dependency>
-        <dependency>
-            <groupId>io.jsonwebtoken</groupId>
-            <artifactId>jjwt-impl</artifactId>
-            <version>0.11.5</version>
-            <scope>runtime</scope>
-        </dependency>
-        <dependency>
-            <groupId>io.jsonwebtoken</groupId>
-            <artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson if Gson is preferred -->
-            <version>0.11.5</version>
-            <scope>runtime</scope>
+            <artifactId>jjwt</artifactId>
+            <version>0.9.1</version>
         </dependency>
 
 

+ 11 - 8
src/main/java/com/dragon/tj/portal/auth/config/WebSecurityConfig.java

@@ -2,6 +2,7 @@ package com.dragon.tj.portal.auth.config;
 
 import com.dragon.tj.portal.auth.service.JwtTokenAuthenticationFilter;
 import com.dragon.tj.portal.auth.service.MyCasAuthenticationEntryPoint;
+import com.dragon.tj.portal.auth.service.MySimpleUrlAuthenticationSuccessHandler;
 import com.dragon.tj.portal.auth.service.MyUserDetailsByNameServiceWrapper;
 import com.dragon.tj.portal.auth.service.MyUserDetailsService;
 import org.jasig.cas.client.validation.Cas20ServiceTicketValidator;
@@ -18,14 +19,9 @@ import org.springframework.security.cas.web.CasAuthenticationFilter;
 import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
 import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper;
 import org.springframework.security.core.userdetails.UserDetailsService;
-import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.security.web.AuthenticationEntryPoint;
 import org.springframework.security.web.SecurityFilterChain;
-import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler;
 
 @Configuration
 @EnableWebSecurity
@@ -46,6 +42,8 @@ public class WebSecurityConfig {
     private JwtTokenAuthenticationFilter jwtTokenAuthenticationFilter;
     @Autowired
     private MyUserDetailsService userDetailsService;
+    @Autowired
+    private MySimpleUrlAuthenticationSuccessHandler mySimpleUrlAuthenticationSuccessHandler;
 
     @Bean
     public WebSecurityCustomizer webSecurityCustomizer() {
@@ -62,6 +60,7 @@ public class WebSecurityConfig {
                 .csrf().disable().cors()
                 .and()
                 .authorizeRequests()
+                .antMatchers("/test/login").permitAll()
                 .anyRequest().authenticated()
                 // .and()
                 // .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
@@ -86,11 +85,15 @@ public class WebSecurityConfig {
 
     public CasAuthenticationFilter casAuthenticationFilter() {
         CasAuthenticationFilter filter = new CasAuthenticationFilter();
-        CasAuthenticationProvider casAuthenticationProvider = casAuthenticationProvider(userDetailsService);
-        filter.setAuthenticationManager(new ProviderManager(casAuthenticationProvider));
-        filter.setAuthenticationSuccessHandler(new SimpleUrlAuthenticationSuccessHandler("http://localhost:8081/"));
         filter.setFilterProcessesUrl("/sso/login");
         // filter.setSessionAuthenticationStrategy(new SessionFixationProtectionStrategy());
+
+        CasAuthenticationProvider casAuthenticationProvider = casAuthenticationProvider(userDetailsService);
+        filter.setAuthenticationManager(new ProviderManager(casAuthenticationProvider));
+
+        mySimpleUrlAuthenticationSuccessHandler.setDefaultTargetUrl("http://localhost:8081/#/?token=");
+        filter.setAuthenticationSuccessHandler(mySimpleUrlAuthenticationSuccessHandler);
+
         return filter;
     }
 

+ 26 - 28
src/main/java/com/dragon/tj/portal/auth/controller/SsoController.java

@@ -1,36 +1,20 @@
 package com.dragon.tj.portal.auth.controller;
 
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dragon.tj.portal.auth.model.LoginUser;
+import com.dragon.tj.portal.auth.service.TokenService;
+import com.dragon.tj.portal.auth.web.entity.SysUser;
 import com.dragon.tj.portal.common.base.R;
-import com.dragon.tj.portal.common.constants.CacheConstants;
-import com.dragon.tj.portal.component.log.annotation.SysLog;
-import com.dragon.tj.portal.entity.SysDict;
-import com.dragon.tj.portal.entity.SysDictItem;
-import com.dragon.tj.portal.service.SysDictItemService;
-import com.dragon.tj.portal.service.SysDictService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cache.annotation.CacheEvict;
-import org.springframework.cache.annotation.Cacheable;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletResponse;
-import javax.validation.Valid;
-import java.io.IOException;
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -42,16 +26,30 @@ import java.util.Map;
  * @since 2023-06-12
  */
 @RestController
-@RequestMapping("/sso")
+@RequestMapping("/test")
 public class SsoController {
-    @RequestMapping("/login")
+
+    @Autowired
+    private TokenService tokenService;
+
+    @GetMapping("/login")
     public R login(HttpServletResponse response) {
-        // String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
-        //         loginBody.getUuid());
-        // ajax.put(Constants.TOKEN, token);
+        SysUser sysUser = new SysUser();
+        sysUser.setIdcard("120222197001010002");
+        sysUser.setName("李四");
+        sysUser.setOrgCode("120000450200");
+        sysUser.setOrgName("服务实战值班岛");
+        List<String> perms = Arrays.asList("gzt", "yyzx");
+        LoginUser loginUser = new LoginUser(sysUser.getIdcard(), sysUser.getOrgCode(), sysUser, new HashSet<>(perms));
+        String token = tokenService.createToken(loginUser);
         Map<String, String> data = new HashMap<>();
-        data.put("token", "123");
+        data.put("token", token);
         return R.ok(data);
     }
+
+    @GetMapping("/hello")
+    public R<String> test() {
+        return R.ok("Hello World!");
+    }
 }
 

+ 16 - 0
src/main/java/com/dragon/tj/portal/auth/model/LoginUser.java

@@ -190,4 +190,20 @@ public class LoginUser implements UserDetails {
     public void setOs(String os) {
         this.os = os;
     }
+
+    public Set<String> getPermissions() {
+        return permissions;
+    }
+
+    public void setPermissions(Set<String> permissions) {
+        this.permissions = permissions;
+    }
+
+    public SysUser getUser() {
+        return user;
+    }
+
+    public void setUser(SysUser user) {
+        this.user = user;
+    }
 }

+ 26 - 0
src/main/java/com/dragon/tj/portal/auth/service/MySimpleUrlAuthenticationSuccessHandler.java

@@ -0,0 +1,26 @@
+package com.dragon.tj.portal.auth.service;
+
+import com.dragon.tj.portal.auth.model.LoginUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.cas.authentication.CasAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@Component
+public class MySimpleUrlAuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {
+
+    @Autowired
+    TokenService tokenService;
+
+    @Override
+    protected String determineTargetUrl(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
+        CasAuthenticationToken casAuthenticationToken = (CasAuthenticationToken) authentication;
+        LoginUser loginUser = (LoginUser) casAuthenticationToken.getUserDetails();
+        String token = tokenService.createToken(loginUser);
+        return getDefaultTargetUrl() + token;
+    }
+}

+ 4 - 5
src/main/java/com/dragon/tj/portal/auth/service/TokenService.java

@@ -13,7 +13,6 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
-import java.time.Duration;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
@@ -103,10 +102,10 @@ public class TokenService {
      * @return 令牌
      */
     private String createToken(Map<String, Object> claims) {
-        String token = Jwts.builder()
+        return Jwts.builder()
                 .setClaims(claims)
-                .signWith(SignatureAlgorithm.HS512, secret).compact();
-        return token;
+                .signWith(SignatureAlgorithm.HS512, secret)
+                .compact();
     }
 
     /**
@@ -133,7 +132,7 @@ public class TokenService {
         loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
         // 根据uuid将loginUser缓存
         String userKey = getTokenKey(loginUser.getToken());
-        stringCacheUtil.set(userKey, JSONUtil.toJsonStr(loginUser), expireTime, TimeUnit.MILLISECONDS);
+        stringCacheUtil.set(userKey, JSONUtil.toJsonStr(loginUser), expireTime, TimeUnit.MINUTES);
     }
 
     /**