springboot-shiro-cas-redis集成session共享,权限共享
springboot-shiro-cas-redis集成session共享,权限共享
- 1.准备jar依赖:
- 2.重写realm,通过继承CasRealm ,MyShiroCasRealm.java
- 3.shiro配置类编写:
- 4.开发过程中遇到的坑
- a.一般单点登录系统设计,会有一个CAS服务器,一个唯一的登录入口系统UC,还有多个子系统service1,service2...集成到UC,在集成工程中,MyShiroCasRealm 和ShiroCasConfig 代码一模一样,当时做的时候这里费了一定的时间。
- b.自定义cookie的时候,要注意domain域名设置,如果是单点登录,各个系统要设置相同的父域名public.com,否则会出现每进入一个子系统都会生成一个session, 也就是session没有实现共享,在退出登录系统后,子系统中用户还有残留,切换用户后发现登录系统用户正确,但是进入子系统中,用户是上次登录的用户。
- c.shiro集成了redis,利用myRedisCacheManager,将权限信息保存到redis中,实现了子系统中权限共享,比如按钮级别权限。
- d.shiro集成了redis,利用dwsm.setSessionManager(redisSessionManager());将session信息保存到redis中,实现了子系统中session共享,进入每个子系统都是同一个session。 浏览器cookie的value就是该session的ID。
- 5.end
1.准备jar依赖:
<!--Shiro核心框架 --><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>${shiro.version}</version><exclusions><exclusion><artifactId>commons-collections</artifactId><groupId>commons-collections</groupId></exclusion></exclusions></dependency><!-- Shiro使用Srping框架 --><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.4.0</version></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.0.1</version></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>2.1.3.RELEASE</version></dependency><!--shiro redis--><dependency><groupId>org.crazycake</groupId><artifactId>shiro-redis</artifactId><version>2.4.2.1-RELEASE</version><exclusions><exclusion><artifactId>shiro-core</artifactId><groupId>org.apache.shiro</groupId></exclusion></exclusions></dependency>
2.重写realm,通过继承CasRealm ,MyShiroCasRealm.java
import com.alibaba.fastjson.JSONObject;
import com.dongao.support.utils.Properties2YmlUtils;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.common.utils.security.RedisUtils;
import com.ruoyi.common.utils.security.ShiroCasUtils;
import com.ruoyi.framework.config.properties.CasProperties;
import com.ruoyi.framework.manager.AsyncManager;
import com.ruoyi.framework.manager.factory.AsyncFactory;
import com.ruoyi.project.system.menu.service.IMenuService;
import com.ruoyi.project.system.role.service.IRoleService;
import com.ruoyi.project.system.user.domain.User;
import com.ruoyi.project.system.user.service.IUserService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.cas.CasRealm;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.subject.SimplePrincipalCollection;
import org.apache.shiro.util.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;import javax.annotation.PostConstruct;
import java.util.HashSet;
import java.util.List;
import java.util.Set;/*** 直接继承CasRealm类,然后CasRealm已经完成了数据的认证工作,我们直接调用父类的功能即可* @ClassName MyShiroCasRealm* @Author zhangcongming* @Version 1.0**/public class MyShiroCasRealm extends CasRealm {private static final Logger logger = LoggerFactory.getLogger(MyShiroCasRealm.class);private final String projectName = Properties2YmlUtils.getCommonYml("project.name");@Autowiredprivate IMenuService menuService;@Autowiredprivate IRoleService roleService;@Autowiredprivate IUserService userService;@Autowiredprivate CasProperties casProperties;@PostConstructpublic void initProperty(){// cas server地址setCasServerUrlPrefix(casProperties.getCasServerUrl());// 客户端回调地址,表示当你认证中心认证完成之后需要访问的service地址setCasService(casProperties.getCasServiceProject() + casProperties.getCasFilterUrlPattern());}/*** 权限认证,为当前登录的Subject授予角色和权限* 本例中该方法的调用时机为需授权资源被访问时* 并且每次访问需授权资源时都会执行该方法中的逻辑,这表明本例中默认并未启用AuthorizationCache* 如果连续访问同一个URL(比如刷新),该方法不会被重复调用,Shiro有一个时间间隔(也就是cache时间,在ehcache-shiro.xml中配置),超过这个时间间隔再刷新页面,该方法会被执行*/@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {logger.info("##################Shiro--权限认证##################");User user = ShiroCasUtils.getSysUser();if(user==null){logger.info("ShiroCasUtils获取用户为空!");throw new AuthenticationException("登录用户为空!");}SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();// 角色列表Set<String> roles = new HashSet<String>();// 功能列表Set<String> menus = new HashSet<String>();// 管理员拥有所有权限if (user.isAdmin()){info.addRole("admin");info.addStringPermission("*:*:*");}else {roles = roleService.selectRoleKeys(user.getUserId());menus = menuService.selectPermsByUserId(user.getUserId());// 角色加入 AuthorizationInfo认证对象info.setRoles(roles);// 权限加入 AuthorizationInfo认证对象info.setStringPermissions(menus);}return info;}/*** 1、CAS认证 ,验证用户身份* 2、将用户基本信息设置到会话中(不用了,随时可以获取的)*/@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) {logger.info("##################Shiro--登录认证##################");// 调用父类的认证,父类认证已经完成了AuthenticationInfo authenticationInfo = super.doGetAuthenticationInfo(token);if (authenticationInfo == null) {logger.warn("authenticationInfo为空,可能是退出了!");return null;}String account = (String) authenticationInfo.getPrincipals().getPrimaryPrincipal();logger.info("认证 account:"+account);User user;user = userService.selectUserByLoginName(account);if (user == null){throw new UnknownAccountException();}//重写了权限返回值List<Object> principals = CollectionUtils.asList(new Object[]{user, authenticationInfo.getPrincipals()});PrincipalCollection principalCollection = new SimplePrincipalCollection(principals, this.getName());SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(principalCollection, authenticationInfo.getCredentials());return info;}/*** 清理缓存权限(这里是用redis保存的权限)*/public void clearCachedAuthorizationInfo(){this.clearCachedAuthorizationInfo(SecurityUtils.getSubject().getPrincipals());}
}
3.shiro配置类编写:
import at.pollux.thymeleaf.shiro.dialect.ShiroDialect;
import com.dongao.support.utils.Properties2YmlUtils;
import com.ruoyi.common.utils.security.MyRedisCacheManager;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.framework.config.properties.CasProperties;
import com.ruoyi.framework.config.properties.RedisProperties;
import com.ruoyi.framework.config.properties.ShiroProperties;
import com.ruoyi.framework.shiro.realm.MyShiroCasRealm;
import com.ruoyi.framework.shiro.session.OnlineSessionDAO;
import com.ruoyi.framework.shiro.session.OnlineSessionFactory;
import com.ruoyi.framework.shiro.web.filter.sync.LogoutCasFilter;
import com.ruoyi.framework.shiro.web.session.OnlineWebSessionManager;
import org.apache.shiro.cas.CasFilter;
import org.apache.shiro.cas.CasSubjectFactory;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.servlet.SimpleCookie;
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import org.crazycake.shiro.RedisCacheManager;
import org.crazycake.shiro.RedisManager;
import org.crazycake.shiro.RedisSessionDAO;
import org.jasig.cas.client.session.SingleSignOutFilter;
import org.jasig.cas.client.session.SingleSignOutHttpSessionListener;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.web.filter.DelegatingFilterProxy;import javax.servlet.Filter;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;/*** shiro+cas配置* @ClassName ShiroCasConfig* @Author zhangcongming* @Version 1.0* @Date 2019/6/20 0020 下午 2:04**/
@Configuration
public class ShiroCasConfig {private final String keyPrefix = Properties2YmlUtils.getCommonYml("spring.redis.sessionPrefix");/*** 配置的redis进行数据的缓存** @return*/@Bean(name = "myShiroCasRealm")public MyShiroCasRealm myShiroCasRealm() {MyShiroCasRealm realm = new MyShiroCasRealm();return realm;}/*** 设置单点退出的监听器,作用是将所有的过期的session将其从对应的映射关系中移除* 注册单点登出listener* SingleSignOutHttpSessionListener用于在Cas Client应用中的Session过期时将其从对应的映射关系中移除。** @return*/@Beanpublic ServletListenerRegistrationBean singleSignOutHttpSessionListener() {ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean();bean.setListener(new SingleSignOutHttpSessionListener());//bean.setName(""); //默认为bean namebean.setEnabled(true);//设置优先级bean.setOrder(Ordered.HIGHEST_PRECEDENCE);return bean;}/*** 注册单点登出filter* 设置单点退出的拦截器,在登录的时候,客户端会去服务端进行认证,此时认证成功之后,* 服务端会将地址和ST返回给客户端,而在此时该拦截器会将session跟ST绑定在一起,* 如果访问退出的时候,此时服务端也会将服务地址和ST返回,此时的监听器会将所有的session全部变为失效。* <p>* SingleSignOutFilter需要配置在所有Filter之前,当Cas Client通过Cas Server登录成功,* Cas Server会携带生成的Service Ticket回调Cas Client,* 此时SingleSignOutFilter会将Service Ticket与当前的Session绑定在一起。* 当Cas Server在进行logout后回调Cas Client应用时也会携带该Service Ticket,* 此时Cas Client配置的SingleSignOutFilter将会使对应的Session失效,进而达到登出的目的。** @return*/@Beanpublic FilterRegistrationBean singleSignOutFilter() {FilterRegistrationBean bean = new FilterRegistrationBean();bean.setName("singleSignOutFilter");bean.setFilter(new SingleSignOutFilter());//拦截所有的请求bean.addUrlPatterns("/*");bean.setEnabled(true);//设置优先级bean.setOrder(10);return bean;}/*** 退出过滤器*/public LogoutCasFilter logoutFilter(){LogoutCasFilter logoutFilter = new LogoutCasFilter();CasProperties casProperties = SpringUtils.getBean(CasProperties.class);String logoutUrl = casProperties.getCasServerUrl() + casProperties.getCasLogoutUrl()+ "?service="+casProperties.getCasServiceProject() + casProperties.getCasFilterUrlPattern();logoutFilter.setRedirectUrl(logoutUrl);return logoutFilter;}/*** 设置shiro的拦截器工厂类* 在设置拦截器的时候,需要先执行cas的拦截器,再执行shiro的拦截器** @param securityManager* @param casFilter* @return*/@Bean(name = "shiroFilter")public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager securityManager,CasFilter casFilter) {CasProperties casProperties = SpringUtils.getBean(CasProperties.class);String loginUrl = casProperties.getCasServerUrl() + "/login?service="+ casProperties.getCasServiceProject() + casProperties.getCasFilterUrlPattern();ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();// 必须设置 SecurityManagershiroFilterFactoryBean.setSecurityManager(securityManager);// 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面shiroFilterFactoryBean.setLoginUrl(loginUrl);// 登录成功后要跳转的连接shiroFilterFactoryBean.setSuccessUrl(casProperties.getLoginSuccessUrl());shiroFilterFactoryBean.setUnauthorizedUrl(casProperties.getUnauthorizedUrl());// 添加casFilter到shiroFilter中,注意,casFilter需要放到shiroFilter的前面Map<String, Filter> filters = new HashMap();filters.put("casFilter", casFilter);filters.put("logout",logoutFilter());shiroFilterFactoryBean.setFilters(filters);loadShiroFilterChain(shiroFilterFactoryBean);return shiroFilterFactoryBean;}/*** 设置配置的触发的地方:用于设置shiro的拦截器,和将每一个拦截器的生命周期交给spring去管理* 注册DelegatingFilterProxy(Shiro)注册DelegatingFilterProxy(shiro) 是一个代理类,用于管理拦截器的生命周期,* 所有的请求都会拦截 ,在创建的时候,filter的执行会优先于bean的执行,所以需要使用该类先来管理bean* <p>* 该步只是将当前的的生命周期交给了spring管理,具体的管理还是需要下面的LifecycleBeanPostProcessor的对象去进行操作** @return*/@Beanpublic FilterRegistrationBean delegatingFilterProxy() {FilterRegistrationBean filterRegistration = new FilterRegistrationBean();filterRegistration.setFilter(new DelegatingFilterProxy("shiroFilter"));// 该值缺省为false,表示生命周期由SpringApplicationContext管理,设置为true则表示由ServletContainer管理//targetFilterLifecycle 指明作用于filter的所有生命周期filterRegistration.addInitParameter("targetFilterLifecycle", "true");filterRegistration.setEnabled(true);//拦截所有的请求filterRegistration.addUrlPatterns("/*");return filterRegistration;}/*** 上面设置了声明周期,下面进行设置生命周期的自动化* 设置方法的自动初始化和销毁,init和destory方法被自动调用。* 注意,如果使用了该类,则不需要手动初始化方法和销毁方法,否则出错** @return*/@Bean(name = "lifecycleBeanPostProcessor")public LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {return new LifecycleBeanPostProcessor();}/*** 开启注解声明:* 开启shiro aop 的注解支持,使用代理的方式,所以需要开启代码的支持** @return*/@Beanpublic DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator() {DefaultAdvisorAutoProxyCreator proxyCreator = new DefaultAdvisorAutoProxyCreator();//设置代理方式,true是cglib的代理方式,false是普通的jdk代理方式proxyCreator.setProxyTargetClass(true);return proxyCreator;}/*** 开启注解声明:** @param securityManager* @return*/@Beanpublic AuthorizationAttributeSourceAdvisor getAuthorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();advisor.setSecurityManager(securityManager);return advisor;}/*** 配置shiro redisManager* 使用的是shiro-redis开源插件* @return*/@Bean(name="redisManager")public RedisManager redisManager() {RedisManager redisManager = new RedisManager();RedisProperties redisProperties = SpringUtils.getBean(RedisProperties.class);redisManager.setHost(redisProperties.getHostName());redisManager.setPort(redisProperties.getPort());// 配置缓存过期时间redisManager.setExpire(Integer.parseInt(String.valueOf(redisProperties.getExpire())));redisManager.setTimeout(redisProperties.getTimeout());redisManager.setPassword(redisProperties.getPassword());return redisManager;}/*** cacheManager 缓存 redis实现* 使用的是shiro-redis开源插件* @return*//*@Bean(name = "shiroRedisCacheManager")public RedisCacheManager redisCacheManager() {RedisCacheManager redisCacheManager = new RedisCacheManager();redisCacheManager.setRedisManager(redisManager());return redisCacheManager;}*//*** 使用自定义redis缓存管理器* 解决redis中key为非字符串乱码问题* @return*/@Bean(name = "myRedisCacheManager")public MyRedisCacheManager myRedisCacheManager() {MyRedisCacheManager myRedisCacheManager = new MyRedisCacheManager();return myRedisCacheManager;}/*** RedisSessionDAO shiro sessionDao层的实现 通过redis* 使用的是shiro-redis开源插件*/@Beanpublic RedisSessionDAO redisSessionDAO() {RedisSessionDAO redisSessionDAO = new RedisSessionDAO();redisSessionDAO.setRedisManager(redisManager());redisSessionDAO.setKeyPrefix(keyPrefix);return redisSessionDAO;}/*** shiro session的管理*/@Bean(name = "redisSessionManager")public DefaultWebSessionManager redisSessionManager() {CasProperties casProperties = SpringUtils.getBean(CasProperties.class);ShiroProperties shiroProperties = SpringUtils.getBean(ShiroProperties.class);DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();sessionManager.setSessionDAO(redisSessionDAO());//会话超时时间,单位:毫秒sessionManager.setGlobalSessionTimeout(casProperties.getSessionExpireTime() * 60 * 1000);//当跳出SHIRO SERVLET时如ERROR-PAGE容器会为JSESSIONID重新分配值导致登录会话丢失sessionManager.setSessionIdCookie(shrioCookie());// 删除过期的sessionsessionManager.setDeleteInvalidSessions(true);// 去掉URL中的JSESSIONIDsessionManager.setSessionIdUrlRewritingEnabled(false);// 是否定时检查sessionsessionManager.setSessionValidationSchedulerEnabled(true);//定时清理失效会话, 清理用户直接关闭浏览器造成的孤立会话,单位为毫秒sessionManager.setSessionValidationInterval(shiroProperties.getSessionValidationInterval() * 60 * 1000);return sessionManager;}/*** cookie 属性设置*/public SimpleCookie shrioCookie(){ShiroProperties shiroProperties = SpringUtils.getBean(ShiroProperties.class);SimpleCookie cookie = new SimpleCookie("shiroCasCookie");//如果是单点登录,各个系统要设置相同的父域名public.com,否则会出现每进入一个子系统都会生成一个session,//也就是session没有实现共享,在退出后,子系统中用户还有残留!cookie.setDomain(“public.com”);//JSESSIONID的path为/用于多个系统共享JSESSIONIDcookie.setPath(shiroProperties.getPath());//浏览器中通过document.cookie可以获取cookie属性,设置了HttpOnly=true,在脚本中就不能得到cookie,可以避免cookie被盗用cookie.setHttpOnly(shiroProperties.isHttpOnly());/*maxAge=-1表示浏览器关闭时失效此Cookie*/cookie.setMaxAge(shiroProperties.getMaxAge() * 24 * 60 * 60);return cookie;}/*** @param myShiroCasRealm* @return*/@Bean(name = "securityManager")public DefaultWebSecurityManager getDefaultWebSecurityManager(MyShiroCasRealm myShiroCasRealm) {DefaultWebSecurityManager dwsm = new DefaultWebSecurityManager();//用户授权/认证信息Cache, 采用EhCache 缓存CasProperties casProperties = SpringUtils.getBean(CasProperties.class);if (casProperties.isEhCacheSwitch()){dwsm.setCacheManager(myRedisCacheManager());}// 指定 SubjectFactorydwsm.setSubjectFactory(new CasSubjectFactory());dwsm.setSessionManager(redisSessionManager());dwsm.setRealm(myShiroCasRealm);return dwsm;}/*** thymeleaf模板引擎和shiro框架的整合*/@Beanpublic ShiroDialect shiroDialect() {return new ShiroDialect();}/*** CAS过滤器** @return*/@Bean(name = "casFilter")public CasFilter getCasFilter() {CasProperties casProperties = SpringUtils.getBean(CasProperties.class);String loginUrl = casProperties.getCasServerUrl() + "/login?service=" +casProperties.getCasServiceProject() + casProperties.getCasFilterUrlPattern();CasFilter casFilter = new CasFilter();//自动注入拦截器的名称casFilter.setName("casFilter");//是否自动的将当前的拦截器进行注入casFilter.setEnabled(true);// 登录失败后跳转的URL,也就是 Shiro 执行 CasRealm 的 doGetAuthenticationInfo 方法向CasServer验证tiket// 我们选择认证失败后重新登录casFilter.setFailureUrl(loginUrl);return casFilter;}/*** 加载shiroFilter权限控制规则(从数据库读取然后配置),角色/权限信息由MyShiroCasRealm对象提供doGetAuthorizationInfo实现获取来的** @param shiroFilterFactoryBean*/private void loadShiroFilterChain(ShiroFilterFactoryBean shiroFilterFactoryBean) {Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();// authc:该过滤器下的页面必须登录后才能访问,它是Shiro内置的一个拦截器org.apache.shiro.web.filter.authc.FormAuthenticationFilter// anon: 可以理解为不拦截// user: 登录了就不拦截// roles["admin"] 用户拥有admin角色// perms["permission1"] 用户拥有permission1权限// filter顺序按照定义顺序匹配,匹配到就验证,验证完毕结束。// url匹配通配符支持:? * **,分别表示匹配1个,匹配0-n个(不含子路径),匹配下级所有路径//1.shiro集成cas后,首先添加该规则filterChainDefinitionMap.put("/", "casFilter");//2.不拦截的请求 对静态资源设置匿名访问filterChainDefinitionMap.put("/favicon.ico**", "anon");filterChainDefinitionMap.put("/css/**", "anon");filterChainDefinitionMap.put("/docs/**", "anon");filterChainDefinitionMap.put("/fonts/**", "anon");filterChainDefinitionMap.put("/img/**", "anon");filterChainDefinitionMap.put("/ajax/**", "anon");filterChainDefinitionMap.put("/js/**", "anon");filterChainDefinitionMap.put("/druid/**", "anon");filterChainDefinitionMap.put("/captcha/captchaImage**", "anon");filterChainDefinitionMap.put("/error", "anon");// 退出 logout地址,shiro去清除session// 此处将logout页面设置为anon,而不是logout,因为logout被单点处理,而不需要再被shiro的logoutFilter进行拦截filterChainDefinitionMap.put("/logout", "logout");// 不需要拦截的访问filterChainDefinitionMap.put("/login", "anon");//不需要登录拦截的接口filterChainDefinitionMap.put("/system/api/**","anon");//3.拦截的请求(从本地数据库获取或者从casserver获取(webservice,http等远程方式),看你的角色权限配置在哪里)filterChainDefinitionMap.put("/user", "authc");//4.登录过的不拦截filterChainDefinitionMap.put("/**", "authc");shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);}}
4.开发过程中遇到的坑
a.一般单点登录系统设计,会有一个CAS服务器,一个唯一的登录入口系统UC,还有多个子系统service1,service2…集成到UC,在集成工程中,MyShiroCasRealm 和ShiroCasConfig 代码一模一样,当时做的时候这里费了一定的时间。
b.自定义cookie的时候,要注意domain域名设置,如果是单点登录,各个系统要设置相同的父域名public.com,否则会出现每进入一个子系统都会生成一个session, 也就是session没有实现共享,在退出登录系统后,子系统中用户还有残留,切换用户后发现登录系统用户正确,但是进入子系统中,用户是上次登录的用户。
cookie.setDomain(“public.com”);
c.shiro集成了redis,利用myRedisCacheManager,将权限信息保存到redis中,实现了子系统中权限共享,比如按钮级别权限。
DefaultWebSecurityManager dwsm = new DefaultWebSecurityManager();dwsm.setCacheManager(myRedisCacheManager());// 指定 SubjectFactorydwsm.setSubjectFactory(new CasSubjectFactory());dwsm.setSessionManager(redisSessionManager());dwsm.setRealm(myShiroCasRealm);
d.shiro集成了redis,利用dwsm.setSessionManager(redisSessionManager());将session信息保存到redis中,实现了子系统中session共享,进入每个子系统都是同一个session。 浏览器cookie的value就是该session的ID。
5.end
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Retrieving a List of Contacts
这里介绍如何获得与你搜索匹配或者部分匹配的联系人列表,主要通过以下技术: 联系人名字匹配 获得与搜索的联系人名字匹配或者部分匹配的联系人列表。Contacts Provider允许多个相同的联系人名字,所以可能会返回一个列表。 特定数据类型匹配,如电话号码匹配 获得与搜索的指定…...
2024/4/25 20:31:33 - 大规模知识图谱数据存储实战解析
本文转自公众号PlantData知识图谱实战(ID:KGPlantData),本文摘录自上海海翼知信息科技有限公司胡芳槐博士4月14日在北京理工大学分享的《大规模知识图谱数据存储》PPT。 作者对知识图谱的存储进行了全面的介绍,内容包括:什么是知识图谱,知识图谱的适用场景,知识图谱数据…...
2024/4/17 7:07:06 - 荐书:《深入分布式缓存》
感怀一本历时2年的书即将出版难免有些激动,同时亦有些忐忑。激动在于这是一次有意义的社会实践,诸多作者参与其中。至完稿时,作者与发起计划时已有些不同。一些朋友因为各种原因退出了,所以从坚持的角度看,完成就意味着第一层面的成功。忐忑在于从初心出发,通读全稿仍有不…...
2024/4/17 7:06:30 - Spring + Mybatis 项目实现动态切换数据源
项目背景:项目开发中数据库使用了读写分离,所有查询语句走从库,除此之外走主库。 最简单的办法其实就是建两个包,把之前数据源那一套配置copy一份,指向另外的包,但是这样扩展很有限,所有采用下面的办法。 参考了两篇文章如下: http://blog.csdn.net/zl3450341/article/…...
2024/4/1 8:37:33 - 如何在淘宝发起知识产权投诉?
如何发起知识产权侵权投诉?一、关于知识产权淘宝网尊重他人的知识产权,我们也期望我们的用户秉持同样的原则。淘宝网提供的是网络交易服务平台,不参与买卖过程本身,所有商品信息均为会员在其电脑终端自行上传,因此,淘宝网不是侵权主体。淘宝网要求会员保证所发布的商品信…...
2024/4/17 7:07:00 - Android之联系人处理
联系人处理 Android联系人数据存储框架 联系人数据存储在联系人数据源组件ContactsProvider2中,与一般的数据源存储组件相比,ContactsProvider2更复杂。其中的数据库包含多个表,提供的Uri也更丰富。 联系人数据由3部分组成,联系人基本信息表,如姓名,联系人账号记录表,每…...
2024/4/17 7:07:00 - Randao 可证公平随机数(VRF)白皮书
Randao 可证公平随机数白皮书 randao.org September 11, 2017Abstract Randao 基于区块链技术,提供开源的、去中心化的、社交化的、可证公平的随机数生成服务。Randao 继承了常用随机数发生器的不可控制性及不可预测性,同时具备其所不具有的可参与性及可证公平性。Randao 通过…...
2024/4/17 7:06:30 - 分库分表是什么?
分库分表是什么? 分库分表就是将本应该存到一个库的,一个表中的数据分到多个库,多个表进行存储,将一个库分成多个库,将一个表分成多个表 为什么要分库分表? 当数据库存储大量的数据时,(出于性能考虑mysql的单表数据量不要超过一千万),查询的速率会随着数据的增多变慢…...
2024/4/18 5:37:32 - 文件流转换为base64码 和 base64码转换为文件流
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! 例子说明一切先写单元测试吧:单元测试的代码如下:package test.com.cs;import com.cs.Bas…...
2024/4/17 7:06:36 - 网络方面的书籍推荐
Table of Contents1. 计算机网络,谢希仁版 2. 计算机网络,自顶向下方法 3. TCP/IP 卷详解一 4. UNP 5. 补充材料 – 鸟哥的linux私房菜 5. 结尾还是那句话,我只推荐自己读过的那些好书,其余的不做太多的评价。计算机网络,谢希仁版这本算是我们本科时候的教材,写得确实很好…...
2024/3/31 20:35:03 - Android中获取系统通讯录联系人并解决Android6.0权限问题
标题 ## Android中获取系统通讯录联系人并显示在EditText 1.需求 一个EditText 点击button的时候转到系统通讯录,选中其中一个通讯录item返回当前界面且把 选中的联系人号码用户名显示在EditText 上。 2.示例3.代码 AddressList.java public class AddressList extends CheckP…...
2024/4/17 7:07:00 - bootStrap高级进阶 表格合并 可编辑 删除添加行 监听事件在onclick $element.blur(function(
下拉框 https://www.jb51.net/article/119929.htm 一。有框线 class=“table-bordered” <div class="col-sm-12 select-table table-bordered"><table id="bootstrap-table" data-mobile-responsive="true" style="white-space:…...
2024/4/18 5:30:33 - OpenJWeb(v1.2)快速开发平台技术白皮书发布
OpenJWeb(v1.2版)技术白皮书QQ:29803446 Msn:baozhengw999@hotmail.com Email:baozhengw@netease.com目 录一、 关于OpenJWeb.. 4 二、OpenJWeb的技术选型.... 4 三、 OpenJWeb(v1.2)现有功能.... 6 3.1数据字典类型和数据字典定义... 6 3.2表结构定义及生成工具... 6 3.…...
2024/4/17 7:06:48 - 解决Eclipse中无法直接使用Base64Encoder的问题
Base64的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的sun.misc.BASE64Encoder/BASE64Decoder类。这个类是sun公司的内部方法,并没有在java api中公开过,不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用。但是在Eclipse和MyEclipse中直接使用,却找…...
2024/4/17 7:07:06 - contacts模块功能分析(较全面)
联系人功能分析(较全面,比较好) 转载自http://blog.csdn.net/lksodit_yiyi/article/details/7887296 1. 简介 本文基于MTK6516代码进行分析联系人模块的功能及数据库操作的流程。 联系人是手机功能中不可缺少的模块,主要记录用户的联系人数据,方便用户快捷的操作和使用…...
2024/4/20 18:05:10 - 知识图谱概念篇
随着互联网的发展,网络数据内容呈现爆炸式增长的态势。由于互联网内容的大规模、异质多元、组织结构松散的特点,给人们有效获取信息和知识提出了挑战。知识图谱(Knowledge Graph) 以其强大的语义处理能力和开放组织能力,为互联网时代的知识化组织和智能应用奠定了基础。最近…...
2024/4/18 16:59:58 - 2011年读书年度小结
今天是大年初七,很多人已经开始回到了自己的工作岗位上,相信大家都会和我一样,每到这个时间都会像以往那样说,唉,时间过得真快啊,春节又结束了。每个长假结束时都是这个感受,无一例外。我今年这个春节过得很充实、很欢乐,第一,是在这短短的几天里,在每天吃喝之外挤出…...
2024/4/17 7:06:48 - 根链平台(RootStock)——基于比特币驱动的智能合约白皮书
根链平台——基于比特币驱动的智能合约白皮书(第9版)日期:2015年11月19日作者:Sergio DemianLerner译者:黄世亮日期:2016年9月2日目录1.引言2.为什么说根链是比特币经济生态里的重要一部分?2.1 比特币经济里利益相关者和其价值保护2.2 治理模式2.3 保护比特币矿工投资2.…...
2024/4/4 22:37:05 - 人工智能 = 物联网,大数据 + 云计算
人工智能 = 物联网,大数据 + 云计算 今天想写一下我对人工智能,物联网,大数据,云计算这几个当下比较热门技术关系的理解 首先,是物联网和大数据的关系,按照我的理解。大数据,其实就是其字面的意思,也就是海量的数据。其来源就是各种存储媒介中存储的信息。大数据也可以…...
2024/4/18 13:14:12 - Android 添加同名通讯录自动合并的问题
在开发添加本地通讯录的过程中发现,同名的联系人信息总会被合并。查阅信息后发现,Android确实是智能合并的情况,而且默认是开启的。 所以要手工修改起模式,修改代码如下: values.put(RawContacts.AGGREGATION_MODE,RawContacts.AGGREGATION_MODE_DISABLED);转载于:https:/…...
2024/4/17 7:07:42
最新文章
- 制作场景资源的Prefab
制作骨骼模型的Prefab 现在游戏内的使用骨骼模型是通过老版的Animator去实现控制的,所以需要将模型切换为Animator 第一步,动画类型设置为Generic,创建Avatar 模型里面会有对应的Avatar文件 我们还需要一个Controller文件,用于…...
2024/4/30 17:00:19 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 【Ubuntu】在 Windows 和 Ubuntu 之间传输文件
在 Ubuntu 上安装 Samba: sudo apt-get update sudo apt-get install samba在 Ubuntu 上创建一个共享文件夹并设置权限: mkdir /home/your_username/shared sudo chown nobody:nogroup /home/your_username/shared sudo chmod 0777 /home/your_username/…...
2024/4/30 6:09:51 - ADB(Android Debug Bridge)操作命令详解及示例
ADB(Android Debug Bridge)是一个强大的命令行工具,它是Android SDK的一部分,主要用于Android设备(包括真实手机和平板电脑以及模拟器)的调试、系统控制和应用程序部署。 下面是一些ADB的常用命令ÿ…...
2024/4/30 1:22:14 - Stable Diffusion的界面参数详解
Stable Diffusion作为一款强大的文本到图像生成模型,其界面参数是用户与模型进行交互的重要桥梁。这些参数不仅影响着模型的生成效果,还能够帮助用户更加精准地控制生成图像的风格、内容等。本文将详细介绍Stable Diffusion的界面参数,帮助用户更好地理解和应用这一工具。 …...
2024/4/30 7:06:56 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/29 23:16:47 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/29 6:03:24 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/29 14:21:50 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/30 9:43:22 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57