【问题标题】:Encountered problems when integrating Shiro and WebSocket interfaces集成 Shiro 和 WebSocket 接口时遇到的问题
【发布时间】:2021-02-10 10:44:03
【问题描述】:

如题,我在Shiro管理的Springboot项目中开发WebSocket时,需要在socket接口中获取当前登录用户的信息

public static Subject getSubjct() {
    return SecurityUtils.getSubject();
}

这一行出错:SecurityUtils.getSubject();

org.apache.shiro.UnavailableSecurityManagerException: No SecurityManager accessible to the calling code, either bound to the org.apache.shiro.util.ThreadContext or as a vm static singleton.  This is an invalid application configuration.
at org.apache.shiro.SecurityUtils.getSecurityManager(SecurityUtils.java:123)
at org.apache.shiro.subject.Subject$Builder.<init>(Subject.java:626)
at org.apache.shiro.SecurityUtils.getSubject(SecurityUtils.java:56)
at com.runtime.system.util.ShiroUtils.getSubjct(ShiroUtils.java:18)
at com.runtime.system.util.ShiroUtils.getUser(ShiroUtils.java:22)

常规的Api接口不存在这个问题。我感到非常苦恼。请帮帮我,谢谢!

【问题讨论】:

    标签: websocket shiro


    【解决方案1】:

    开箱即用的 Shiro 不知道如何处理运行异步请求的线程。

    您需要将数据与异步请求(通常是主题)相关联,然后通过 Runnable/Callable 执行您需要执行的操作:

    Subject subject = <get the subject from your async context>;
    subject.execute( <your runnable> );
    

    见:https://shiro.apache.org/subject.html#thread-association

    【讨论】:

    • 万分感谢!
    猜你喜欢
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 2022-01-25
    • 2017-08-28
    • 1970-01-01
    • 2017-08-12
    • 2017-04-09
    • 1970-01-01
    相关资源
    最近更新 更多