Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从angular project到jhipster的jwt连接_Java_Angular_Jhipster - Fatal编程技术网

Java 从angular project到jhipster的jwt连接

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

我有一个angular基本项目和一个简单的microservice jhipster项目。因为我在jhipster项目中选择了jwt选项,所以我想使用angular项目中的方法。在寻找了几个小时后,我终于找到了这段代码,这段代码帮助我成功连接,但我遇到了一个奇怪的错误,这让我很恼火。以下是我用来尝试连接和使用jhipster方法的angular类:

auth-interceptor.ts文件

@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);