【问题标题】:Annotation based security restriction does not work for web socket triggered method calls基于注解的安全限制不适用于 Web 套接字触发的方法调用
【发布时间】:2017-05-09 17:39:49
【问题描述】:

我对此进行了一些研究,但找不到解决方案。

我有这样的课

@Stateless
class ConfigBean {
  @RequiresRole("administrator")
  public void reloadConfiguration(){
     ......
  }
}

我有如下 JAX-RS(球衣)服务。

@Path("config")
class ConfigService{

  @EJB
  ConfigBean config;

  @Get
  @Path("reload")
  public void reload(){ 
     config.reloadConfiguration();
  }
}

这将在调用 API /Test/config/relaod 时正常工作(即仅适用于管理员用户)。

但是下面的代码没有按预期工作(即普通用户可以触发重新加载配置方法),

@ServerEndpoint("/socket") 
public class EchoServer {
/**
 * @OnOpen allows us to intercept the creation of a new session.
 * The session class allows us to send data to the user.
 * In the method onOpen, we'll let the user know that the handshake was 
 * successful.
 */

@EJB
ConfigBean config;

@OnOpen
public void onOpen(Session session){
    System.out.println(session.getId() + " has opened a connection"); 
    try {
        session.getBasicRemote().sendText("Connection Established");
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

/**
 * When a user sends a message to the server, this method will intercept the message
 * and allow us to react to it. For now the message is read as a String.
 */
@OnMessage
public void onMessage(String message, Session session){
    System.out.println("Message from " + session.getId() + ": " + message);
    try {
        if(message.equalsIgnoreCase("reloadConfig")){
           config.reloadConfiguration();
        }
    } catch (IOException ex) {
        ex.printStackTrace();
    }
 }

/**
 * The user closes the connection.
 * 
 * Note: you can't send messages to the client from this method
 */
@OnClose
public void onClose(Session session){
    System.out.println("Session " +session.getId()+" has ended");
   }
}

【问题讨论】:

    标签: java security websocket annotations shiro


    【解决方案1】:

    Shiro JAX-RS 集成仅拦截 JAX-RS 端点。

    对于更通用的注释方法,您可以使用 Guice、Spring 或 AspectJ 集成。

    如果您使用 CDI,可以查看 this branch 的 Shiro Annotation Interceptor,这只是第一次通过,但它正在工作

    【讨论】:

    • 我的问题是,当HTTP请求触发的方法调用时,注释工作正常,但是当它被Web套接字消息触发时,它就不起作用了。
    猜你喜欢
    • 2011-05-16
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    相关资源
    最近更新 更多