繁体   English   中英

Spring-boot 应用 + Angular 8 部署

[英]Spring-boot application + Angular 8 deploy

我需要部署我的 web 应用程序,后端:Spring 前端:Angular

Angular 与电容器集成在一起,因为我需要在 Android 上运行我的 FE

我在远程主机上部署了我的 spring 应用程序,并安装了 Apache 2 + tomcat。

When i deploy the spring boot war file into Tomcat all the HTTP request work except for the authenticate, that use JWT to authenticate User. 当我尝试执行该请求时,与服务器的连接停止。 与 JWT 是否存在任何可能导致方法失败的联系?

我真的不明白为什么因为离线它可以正常工作。 你们能帮帮我吗?

这是认证 controller

@RestController
@CrossOrigin
public class JwtAuthenticationController {

@Autowired
private AuthenticationManager authenticationManager;

@Autowired
private JwtTokenUtil jwtTokenUtil;

@Autowired
private JwtUserDetailsService userDetailsService;

@RequestMapping(value = "/authenticate", method = RequestMethod.POST)
public ResponseEntity<?> createAuthenticationToken(@RequestBody JwtRequest authenticationRequest) throws Exception {

    authenticate(authenticationRequest.getUsername(), authenticationRequest.getPassword());

    final UserDetails userDetails = userDetailsService
            .loadUserByUsername(authenticationRequest.getUsername());

    final String token = jwtTokenUtil.generateToken(userDetails);

    return ResponseEntity.ok(new JwtResponse(token, userDetails));
}


private void authenticate(String username, String password) throws Exception {
    try {
        authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));
    } catch (DisabledException e) {
        throw new Exception("USER_DISABLED", e);
    } catch (BadCredentialsException e) {
        throw new Exception("INVALID_CREDENTIALS", e);
    }
}
}

这是 pom.xml

<packaging>war</packaging>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <start-class>leopardiproject.csd.CsdApplication</start-class>
</properties>

<dependencies>
    <dependency>
        <groupId>com.braintreepayments.gateway</groupId>
        <artifactId>braintree-java</artifactId>
        <version>2.79.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.9.1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>annotationProcessor</scope>
    </dependency>
    <dependency>
        <groupId>com.twilio.sdk</groupId>
        <artifactId>twilio</artifactId>
        <version>8.2.0</version>
      </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
        <scope>compile</scope>
    </dependency>
</dependencies>

<build>
    <finalName>giacomoLeopardi</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

这是执行来自我的客户的 HTTP 发布请求的服务:

export class User{
constructor(
public username: string,
public password: string,
public name: string,
public lastname: string,
public checkbox1: boolean,
public checkbox2: boolean,
public checkbox3: boolean,
public enabled: boolean,
public roles: Role
) {}
}

@Injectable({
providedIn: 'root'
})
export class AuthenticationService {

constructor(private httpClient:HttpClient, private router: Router, private location: Location) { 
}

authenticate(username, password) {
                                  //EDITED
return this.httpClient.post<any>('http://remote-ip-address:8080/authenticate',{username,password}).pipe(
  map(
    userData => {
    sessionStorage.setItem('username',username);
    let tokenStr= userData.token;
    sessionStorage.setItem('token', tokenStr);
    sessionStorage.setItem('Role', userData.utente.authorities[0].authority);
    return userData;
    }
  )

  );
 }


 logOut() {
 sessionStorage.removeItem('username');
 sessionStorage.removeItem('token');
 sessionStorage.removeItem('Role');
 this.router.navigate(['/home']).then(() => {
 window.location.reload();
});
}

getRole(){
let token = jwt_decode(sessionStorage.getItem('token'));
return token['role'];
}
}

我需要部署我的 web 应用程序,后端:Spring 前端:Angular

Angular 与电容器集成在一起,因为我需要在 Android 上运行我的 FE

我在远程主机上部署了我的 spring 应用程序,并安装了 Apache 2 + tomcat。

When i deploy the spring boot war file into Tomcat all the HTTP request work except for the authenticate, that use JWT to authenticate User. 当我尝试执行该请求时,与服务器的连接停止。 与 JWT 是否存在任何可能导致方法失败的联系?

我真的不明白为什么因为离线它可以正常工作。 你们能帮帮我吗?

这是认证 controller

@RestController
@CrossOrigin
public class JwtAuthenticationController {

@Autowired
private AuthenticationManager authenticationManager;

@Autowired
private JwtTokenUtil jwtTokenUtil;

@Autowired
private JwtUserDetailsService userDetailsService;

@RequestMapping(value = "/authenticate", method = RequestMethod.POST)
public ResponseEntity<?> createAuthenticationToken(@RequestBody JwtRequest authenticationRequest) throws Exception {

    authenticate(authenticationRequest.getUsername(), authenticationRequest.getPassword());

    final UserDetails userDetails = userDetailsService
            .loadUserByUsername(authenticationRequest.getUsername());

    final String token = jwtTokenUtil.generateToken(userDetails);

    return ResponseEntity.ok(new JwtResponse(token, userDetails));
}


private void authenticate(String username, String password) throws Exception {
    try {
        authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(username, password));
    } catch (DisabledException e) {
        throw new Exception("USER_DISABLED", e);
    } catch (BadCredentialsException e) {
        throw new Exception("INVALID_CREDENTIALS", e);
    }
}
}

这是 pom.xml

<packaging>war</packaging>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <start-class>leopardiproject.csd.CsdApplication</start-class>
</properties>

<dependencies>
    <dependency>
        <groupId>com.braintreepayments.gateway</groupId>
        <artifactId>braintree-java</artifactId>
        <version>2.79.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.9.1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>annotationProcessor</scope>
    </dependency>
    <dependency>
        <groupId>com.twilio.sdk</groupId>
        <artifactId>twilio</artifactId>
        <version>8.2.0</version>
      </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
        <scope>compile</scope>
    </dependency>
</dependencies>

<build>
    <finalName>giacomoLeopardi</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

这是执行来自我的客户的 HTTP 发布请求的服务:

export class User{
constructor(
public username: string,
public password: string,
public name: string,
public lastname: string,
public checkbox1: boolean,
public checkbox2: boolean,
public checkbox3: boolean,
public enabled: boolean,
public roles: Role
) {}
}

@Injectable({
providedIn: 'root'
})
export class AuthenticationService {

constructor(private httpClient:HttpClient, private router: Router, private location: Location) { 
}

authenticate(username, password) {
                                  //EDITED
return this.httpClient.post<any>('http://remote-ip-address:8080/authenticate',{username,password}).pipe(
  map(
    userData => {
    sessionStorage.setItem('username',username);
    let tokenStr= userData.token;
    sessionStorage.setItem('token', tokenStr);
    sessionStorage.setItem('Role', userData.utente.authorities[0].authority);
    return userData;
    }
  )

  );
 }


 logOut() {
 sessionStorage.removeItem('username');
 sessionStorage.removeItem('token');
 sessionStorage.removeItem('Role');
 this.router.navigate(['/home']).then(() => {
 window.location.reload();
});
}

getRole(){
let token = jwt_decode(sessionStorage.getItem('token'));
return token['role'];
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM