Ich entwickle eine WebSocket-Server-Anwendung mit Feder. Klasse PlayerHandlerSpring AOP Aspekte nicht auf Anmerkungen
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import java.io.IOException;
/**
* Created by kris on 11.07.16.
*/
public class PlayerHandler extends TextWebSocketHandler{
public PlayerHandler(){}
@Override
@AuthorizationRequired
public void handleTextMessage(WebSocketSession session, TextMessage tm) throws IOException {
session.sendMessage(tm);
}
}
ich Benutzer möchte mit jeder eingehenden Anforderung von Token autorisiert werden, so habe ich eine Aspect UserAuthorization
package com.berrigan.axevor.authorization;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class UserAuthorization {
@Around("@annotation(com.berrigan.axevor.authorization.AuthorizationRequired)")
public void authorize(ProceedingJoinPoint jp) throws Throwable{
System.out.println("\n\n\n\n\Works\n\n\n\n\n\n");
jp.proceed();
}
}
ich die @AuthorizationRequired Anmerkung hinzugefügt, die Verfahren, bei denen Benutzer anzeigt, sind werde autorisiert werden. Leider kann die Methode autorisiert nie aufgerufen werden. Ich habe folgenden Code zu meiner Hauptklasse hinzugefügt, um zu überprüfen, ob die Bean erstellt wurde.
UserAuthorization ua = ctx.getBean(UserAuthorization.class); // ApplicationContext
if(au == null) System.out.println("is null")
Aber ich bekomme kein solches Protokoll. Meine Feder Config
@EnableAutoConfiguration
@Configuration
@EnableAspectJAutoProxy
@Import({com.berrigan.axevor.websocket.WebSocketConfig.class})
@ComponentScan(basePackages = {"com.berrigan.axevor"})
public class Config {}
Annotation Code:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface AuthorizationRequired{}
@Configuration @EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer{
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry){
registry.addHandler(playerHandler(), "/game").setAllowedOrigins("*");
}
@Bean
public WebSocketHandler playerHandler(){
return new PlayerHandler();
}
}
Lassen Sie uns Ihre Anmerkung sehen. Sende einen [mcve], während du dabei bist. –
Ja, das alles funktioniert gut für mich, mit einigen Grundannahmen. Bitte poste ein [mcve]. –
Dieser Code sollte lauffähig sein, ich benutze Spring-Boot, um es auszuführen – Berrigan