![](/img/trans.png)
[英]Deploy spring-boot and angular 7 application using war into tomcat 8.5
[英]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.