Java 从angular project到jhipster的jwt连接
我有一个angular基本项目和一个简单的microservice jhipster项目。因为我在jhipster项目中选择了jwt选项,所以我想使用angular项目中的方法。在寻找了几个小时后,我终于找到了这段代码,这段代码帮助我成功连接,但我遇到了一个奇怪的错误,这让我很恼火。以下是我用来尝试连接和使用jhipster方法的angular类: auth-interceptor.ts文件Java 从angular project到jhipster的jwt连接,java,angular,jhipster,Java,Angular,Jhipster,我有一个angular基本项目和一个简单的microservice jhipster项目。因为我在jhipster项目中选择了jwt选项,所以我想使用angular项目中的方法。在寻找了几个小时后,我终于找到了这段代码,这段代码帮助我成功连接,但我遇到了一个奇怪的错误,这让我很恼火。以下是我用来尝试连接和使用jhipster方法的angular类: auth-interceptor.ts文件 @Injectable() export class AuthInterceptor implement
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private token: TokenStorageService) { }
intercept(req: HttpRequest<any>, next: HttpHandler) {
let authReq = req;
const token = this.token.getToken();
if (token != null) {
authReq = req.clone({ headers: req.headers.set(TOKEN_HEADER_KEY, 'Bearer ' + token) });
}
return next.handle(authReq);
}
}
export const httpInterceptorProviders = [
{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }
];
token-storage.service.spec.ts
describe('TokenStorageService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [TokenStorageService]
});
});
it('should be created', inject([TokenStorageService], (service: TokenStorageService) => {
expect(service).toBeTruthy();
}));
});
token.storage.service.ts
const httpOptions = {
headers: new HttpHeaders({ 'Content-Type': 'application/json' })
};
@Injectable({
providedIn: 'root'
})
export class AuthService {
private loginUrl = 'http://localhost:8082/api/authenticate';
private signupUrl = 'http://localhost:8080/api/auth/signup';
constructor(private http: HttpClient) {
}
attemptAuth(credentials: AuthLoginInfo): Observable<JwtResponse> {
return this.http.post<JwtResponse>(this.loginUrl, credentials, httpOptions);
}
signUp(info: SignUpInfo): Observable<string> {
return this.http.post<string>(this.signupUrl, info, httpOptions);
}
}
const TOKEN_KEY = 'AuthToken';
const USERNAME_KEY = 'AuthUsername';
const AUTHORITIES_KEY = 'AuthAuthorities';
@Injectable({
providedIn: 'root'
})
export class TokenStorageService {
private roles: Array<string> = [];
constructor() { }
signOut() {
window.sessionStorage.clear();
}
public saveToken(token: string) {
window.sessionStorage.removeItem(TOKEN_KEY);
window.sessionStorage.setItem(TOKEN_KEY, token);
}
public getToken(): string {
return sessionStorage.getItem(TOKEN_KEY);
}
public saveUsername(username: string) {
window.sessionStorage.removeItem(USERNAME_KEY);
window.sessionStorage.setItem(USERNAME_KEY, username);
}
public getUsername(): string {
return sessionStorage.getItem(USERNAME_KEY);
}
public saveAuthorities(authorities: string[]) {
window.sessionStorage.removeItem(AUTHORITIES_KEY);
window.sessionStorage.setItem(AUTHORITIES_KEY, JSON.stringify(authorities));
}
public getAuthorities(): string[] {
this.roles = [];
if (sessionStorage.getItem(TOKEN_KEY)) {
JSON.parse(sessionStorage.getItem(AUTHORITIES_KEY)).forEach(authority => {
this.roles.push(authority.authority);
});
}
return this.roles;
}
}
有了此功能,我可以成功登录,但一旦登录,当我尝试执行任何其他操作时,就会出现此错误:
core.js:6014 ERROR SyntaxError: Unexpected token u in JSON at position 0
at JSON.parse (<anonymous>)
at TokenStorageService.getAuthorities (token-storage.service.ts:45)
core.js:6014错误语法错误:JSON中位于位置0的意外标记u
在JSON.parse()处
在TokenStorageService.GetAuthories(token storage.service.ts:45)
伙计们,如果你知道从angular使用jwt连接jhipster的任何简单方法,请帮助我,因为我在这里被阻止了,我有一个完整的jhipster项目,我不能使用任何..你在
GetAuthories
方法中有一个输入错误。令牌未定义。您遇到的错误来自尝试在JSON.parse(…)
中解析未定义的。您检查存储器中的令牌密钥
,但读取权限密钥
您的代码:
if (sessionStorage.getItem(TOKEN_KEY)) {
JSON.parse(sessionStorage.getItem(AUTHORITIES_KEY)).forEach(authority => {
正确代码:
if (sessionStorage.getItem(AUTHORITIES_KEY)) {
JSON.parse(sessionStorage.getItem(AUTHORITIES_KEY)).forEach(authority => {
嗯,您的服务器似乎没有在JWT响应中提供权限。由于数据丢失,saveAuthorities
会保存以后无法提供的字符串“未定义”
如果缺少权限
的原因是您从internet上盲目复制了一些随机代码,请从class JwtResponse
和saveAuthorities
中删除权限
,以及对它们的所有引用
否则,只需在回复中提供权限
或者,您可以在将权限保存到onSubmit
callback中时检查权限是否存在
if (data.authorities)
this.tokenStorage.saveAuthorities(data.authorities);
该错误表明您的jwt格式不正确。您能告诉我如何修复吗?请设置一个有效的、格式不错误的jwt…?感谢您的回复,但我更改了它,就像您所说的一样,我仍然会收到相同的错误消息。如果清除存储(DevTools->Application->Clear storage),您可能会在其中包含一些无效数据。哦,您正在保存未定义的数据。
if (sessionStorage.getItem(AUTHORITIES_KEY)) {
JSON.parse(sessionStorage.getItem(AUTHORITIES_KEY)).forEach(authority => {
if (data.authorities)
this.tokenStorage.saveAuthorities(data.authorities);