shiroとwebsocketを使って単一ログイン
9329 ワード
shiroの配置は言わないで、ネット上はとても多くて、websocketの配置は私の別の文章を見ることができます:https://blog.csdn.net/qq_37838223/article/details/80419325
org.springframework.boot
spring-boot-starter-websocket
com.github.theborakompanioni
thymeleaf-extras-shiro
1.2.1
private final Logger logger = LoggerFactory.getLogger(AuthRealm.class);
@Autowired
private SimpMessagingTemplate messagingTemplate;
// ,
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken tokens) throws AuthenticationException {
UsernamePasswordToken token=(UsernamePasswordToken)tokens;// token
String username=token.getUsername();
String password=new String(token.getPassword());
User user=new User();
user.setUsername(username);
user.setPassword("123456");
SessionsSecurityManager securityManager = (SessionsSecurityManager) SecurityUtils.getSecurityManager();
DefaultSessionManager sessionManager = (DefaultSessionManager) securityManager.getSessionManager();
Collection sessions = sessionManager.getSessionDAO().getActiveSessions();// session
for (Session session : sessions) {
User users = (User) (session.getAttribute("USER_IN_SESSION"));
if (users != null) {
if (username.equals(users.getUsername())&&password.equals(users.getPassword())) {
if(SecurityUtils.getSubject().getSession().getId().equals(session.getId())){
break;
}else {
logger.debug(username + " , session");
sessionManager.getSessionDAO().delete(session);
messagingTemplate.convertAndSendToUser(username, "/queue/message", new WiselyResponse(" !"));
}
}
}
}
SimpleAuthenticationInfo ai=new SimpleAuthenticationInfo(user,user.getPassword(),this.getClass().getName());// shiro. CredentialsMatcher
return ai;
}
<span style="color:#9876aa;">th</span><span style="color:#bababa;">:inline=</span><span style="color:#a5c261;">"javascript"</span><span style="color:#e8bf6a;">>
</span><span style="color:#e8bf6a;"> </span><span style="color:#808080;">// var session=[[session.USER_IN_SESSION]];
</span><span style="color:#808080;"> </span><span style="color:#cc7832;font-weight:bold;">var </span>user=[[${session.USER_IN_SESSION.username}]]<span style="color:#cc7832;">;
</span><span style="color:#cc7832;"> </span><span style="color:#cc7832;font-weight:bold;">var </span>socket = <span style="color:#cc7832;font-weight:bold;">new </span>SockJS(<span style="color:#6a8759;">'/endpointWisely'</span>)<span style="color:#cc7832;">; </span><span style="color:#808080;">//1
</span><span style="color:#808080;"> </span>stompClient = <span style="color:#9876aa;">Stomp</span>.<span style="color:#ffc66d;">over</span>(socket)<span style="color:#cc7832;">;</span><span style="color:#808080;">//2
</span><span style="color:#808080;"> </span><span style="color:#9876aa;">stompClient</span>.<span style="color:#ffc66d;">connect</span>({
<span style="color:#9876aa;">name</span>: user
}<span style="color:#cc7832;">, </span><span style="color:#cc7832;font-weight:bold;">function</span>(frame) {<span style="color:#808080;">//3</span><span style="color:#cc7832;">
</span><span style="color:#cc7832;"> </span><span style="color:#9876aa;">stompClient</span>.<span style="color:#ffc66d;">subscribe</span>(<span style="color:#6a8759;">'/user/queue/message'</span><span style="color:#cc7832;">, </span><span style="color:#cc7832;font-weight:bold;">function </span>(response) {
<span style="color:#cc7832;font-weight:bold;">var </span>returnData = JSON.<span style="color:#ffc66d;">parse</span>(response.<span style="color:#9876aa;">body</span>)<span style="color:#cc7832;">;
</span><span style="color:#cc7832;"> </span><span style="color:#ffc66d;">showResponse</span>(<span style="color:#6a8759;">" :" </span>+ returnData.responseMessage)<span style="color:#cc7832;">;
</span><span style="color:#cc7832;"> </span>})<span style="color:#cc7832;">;
</span><span style="color:#cc7832;"> </span>})<span style="color:#cc7832;">;
</span><span style="color:#cc7832;">
</span><span style="color:#cc7832;"> </span><span style="color:#cc7832;font-weight:bold;">function </span><span style="color:#ffc66d;">disconnect</span>() {
<span style="color:#cc7832;font-weight:bold;">if </span>(<span style="color:#9876aa;">stompClient </span>!= <span style="color:#cc7832;font-weight:bold;">null</span>) {
<span style="color:#9876aa;">stompClient</span>.<span style="color:#ffc66d;">disconnect</span>()<span style="color:#cc7832;">;
</span><span style="color:#cc7832;"> </span>}
}
<span style="color:#cc7832;font-weight:bold;">function </span><span style="color:#ffc66d;">showResponse</span>(message) {
<span style="color:#ffc66d;">alert</span>(message)
}
<span style="color:#e8bf6a;">
参考のブログ:https://www.cnblogs.com/zhanying999666/p/8392592.html