shiro 不执行授权方法 doGetAuthorizationInfo()

ShiroDbRealm.java 代码如下

public class ShiroDbRealm extends AuthorizingRealm {

    @Resource
    private UserService userService;

    /**
     * 认证回调函数,登录时调用.
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {
        UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
        User currentUser = userService.findByUserName(token.getUsername());
        if (currentUser != null) {
            if (currentUser.getStatus()==User.STATUS_DISABLED) {
                throw new DisabledAccountException("用户已注销");
            }else if(currentUser.getStatus()==User.STATUS_NOT_ACTIVE){
                throw new DisabledAccountException("用户未激活");//这里需要编写一个用户未激活异常
            }
            return new SimpleAuthenticationInfo(currentUser.getUsername(),currentUser.getUserpwd(), "");
        }
        return null;
    }

    /**
     * 授权查询回调函数, 进行鉴权但缓存中无用户的授权信息时调用.
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(
            PrincipalCollection principals) {
        // Cache<Object, AuthenticationInfo> authenticationCache =
        // getAuthenticationCache();
        String primaryPrincipal = (String) principals.getPrimaryPrincipal();
        System.out.println("-----------*************************------------>"+ primaryPrincipal);
        List<String> roles = new ArrayList<String>();  
        List<String> permissions = new ArrayList<String>();

        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();

        User user = userService.findByUserName(primaryPrincipal);
        if(user != null){
            for (Role role : user.getRoles()) {
                roles.add(role.getName());
                for (Permission p : role.getPermissions()) {
                    permissions.add(p.getPrivilege());
                }
            }
        }else{
            throw new AuthorizationException();
        }
        //给当前用户设置角色
        info.addRoles(roles);
        //给当前用户设置权限
        info.addStringPermissions(permissions); 

        return info;
    }
}

applicationContext-shiro.xml配置

 <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">

    <description>Shiro安全配置</description>

    <!-- Shiro's main business-tier object for web-enabled applications -->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm" ref="shiroDbRealm"/>
        <property name="cacheManager" ref="shiroEhcacheManager"/>
    </bean>

    <!-- 項目自定义的Realm -->
    <bean id="shiroDbRealm" class="com.wsq.app.service.common.ShiroDbRealm">
        <!-- <property name="userService" ref="userService"/>  这里我在项目中只用了注解注入-->
    </bean>


    <!-- Shiro Filter -->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <!-- 这个属性是必须的 -->
        <property name="securityManager" ref="securityManager"/>
        <!-- 没有登录的用户请求需要登录的页面时自动跳转到登录页面,不是必须的属性,不输入地址的话会自动寻找项目web项目的根目录下的”/login.jsp”页面 -->
        <property name="loginUrl" value="/login"/>
        <!-- 登录成功默认跳转页面,不配置则跳转至”/”。如果登陆前点击的一个需要登录的页面,则在登录自动跳转到那个需要登录的页面。不跳转到此 -->
        <property name="successUrl" value="/"/>
        <!-- 没有权限默认跳转的页面 -->
        <property name="unauthorizedUrl" value=""/>
        <!-- 就是需要验证的地址的列表,常用的包含anon、authc、perms、roles、user、logout。 -->
        <property name="filterChainDefinitions">
            <value>
                /static/** = anon
                /login = anon
                /login/** = anon
                /logout = user
                /** = authc
            </value>
        </property>
    </bean>

    <!-- 用户授权信息Cache, 采用EhCache -->
    <bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
        <property name="cacheManagerConfigFile" value="classpath:resource/ehcache-shiro.xml"/>
    </bean>

    <!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->
    <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>

    <!-- AOP式方法级权限检查  -->
    <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor">
        <property name="proxyTargetClass" value="true"/>
    </bean>

    <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
        <property name="securityManager" ref="securityManager"/>
    </bean>

</beans>

web.xml配置

  <!-- Shiro Security filter -->
    <filter>
        <filter-name>shiroFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>shiroFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

集成以后,项目可以正常启动,登陆时也可以正常调用登录验证,可就是在验证授权时,不掉用。求解答~也没分了,不好意思。

12个回答

我也是这个问题,授权的方法不调用,之前都要调用的,不知道现在怎么不调用了,也没有异常抛出来,不知道你们解决没有

在spring-mvc的配置文件中,添加

 <aop:config proxy-target-class="true"></aop:config>
    <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
        <property name="securityManager" ref="securityManager"/>
    </bean>

启动shiro授权注解拦截方式,就可以了
另外这个还需要aspectj的支持

 <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>${aspectj.version}</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>${aspectj.version}</version>
        </dependency>
c441515911
c441515911 我的添加这个配置之后,调用了自定义realm的doGetAuthorizationInfo方法。页面角色,权限控制正常了
大约 2 年之前 回复
u011981342
流风Y回雪 试了没有用啊
大约 3 年之前 回复

最近我也遇到这个问题,不知道楼主是否有解决,有的话还忘分享下,谢谢!

图片说明
有没有加上aop切面支持,我也遇到过这个问题,看了好多帖子,发现最终问题是没有加aop,加了这个就可以授权了
图片说明

Myc_CSDN
和Java狼狈为奸 大哥,您算是说了句实话。呜呜呜呜呜~
一年多之前 回复

我靠,没看到一个有用的回答,真心酸

cc1111cc
猿起猿落 回复dzl84394: 谢谢谢谢谢谢,我就是没有配pers[user:edit]不行,配完了就好了
2 年多之前 回复
zyq496
之舟 回复dzl84394: 给你一千个 ,一万个赞 ,真想Qj你,做为报答(不管你男的女的)
接近 3 年之前 回复
dzl84394
dzl84394 回复dzl84394: 突然发现authc只是要登陆就行,authc,perms[user:edit]这样才是要鉴权
大约 3 年之前 回复
dzl84394
dzl84394 你解决了么,刚遇到这个问题
大约 3 年之前 回复

这个问题我也碰到了,现在已经解决,出现这个问题的原因是 你的地址栏的地址没有改变。倒是filter不会调用。
上代码:
@RequestMapping(value = "doLogin", method = RequestMethod.POST)
//@ResponseBody
public String login(String userName,String password, HttpServletRequest request,Model model) {
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(userName,password);
token.setRememberMe(false);
String msg="";
try{
if (!subject.isAuthenticated()) {
subject.login(token);

}else{
String username= (String)subject.getPrincipal();

if(!username.equalsIgnoreCase(userName)){
subject.logout();

subject.login(token);

}

}
return "redirect:/webpage/moduleMaintain"; --- 主要是这里要修改成这样, 不要直接返回 moduleMaintain 那个页面。 那样的话处理是forword的形式地址栏不会改变。前提是你之前的其他配置都正确。

    }catch (IncorrectCredentialsException e) {  
        msg = "Password for account " + token.getPrincipal() + " was incorrect.";  
        model.addAttribute("message", msg);  
        System.out.println(msg);  
    } catch (ExcessiveAttemptsException e) {  
        msg = "Login fault to much times";  
        model.addAttribute("message", msg);  
        System.out.println(msg);  
    } catch (LockedAccountException e) {  
        msg = "The account for username " + token.getPrincipal() + " was locked.";  
        model.addAttribute("message", msg);  
        System.out.println(msg);  
    } catch (DisabledAccountException e) {  
        msg = "The account for username " + token.getPrincipal() + " was disabled.";  
        model.addAttribute("message", msg);  
        System.out.println(msg);  
    } catch (ExpiredCredentialsException e) {  
        msg = " the account for username " + token.getPrincipal() + "  was expired.";  
        model.addAttribute("message", msg);  
        System.out.println(msg);  
    } catch (UnknownAccountException e) {  
        msg = "There is no user with username of " + token.getPrincipal();
        model.addAttribute("message", msg);  
        System.out.println(msg); 
    }
    return "login";
}
donglicheng666
donglicheng666 有得,谢谢大神
2 年多之前 回复

楼主的问题解决了吗?我也遇到了这个问题,登录后台都成功了,跳转进入时就又回到登录页面了。怎么回事呢???

u011226675
金色ED狂风 你怎们解决的,我现在也是这个问题
大约 3 年之前 回复

/**
* 授权查询回调函数, 进行鉴权但缓存中无用户的授权信息时调用.
*/
清缓存

楼主的问题解决了吗?我也遇到了这个问题,登录后台都成功了,跳转进入时就又回到登录页面了。怎么回事呢???

u011226675
金色ED狂风 你怎们解决的,我现在也是这个问题
大约 3 年之前 回复

这个是我的解决方案,真实有用,可以看考下http://www.javaweb1024.com/java/JavaWebzhongji/2016/06/06/966.html,如果有问题,可以私聊我.这是我的网站

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
shiro登录认证成功之后不会自动执行doGetAuthorizationInfo

shiro登录认证的时候执行doGetAuthenticationInfo之后不会自动执行doGetAuthorizationInfo不是说认证成功会自动执行的吗,我登录成功之后因为没授权结果又跳回了登录界面

shiro不执行认证方法 不调用自定义的doGetAuthenticationInfo方法

在访问认证路径时 String exceptionClassName = (String) request.getAttribute("shiroLoginFailure"); 在这直接路过 不去调用自定的realm

spring集成shiro不执行realm

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="myrealm" class="com.ss.shiro.realm.MyRealm"></bean> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="authenticator" ref="modelAuthricator" /> <property name="cacheManager" ref="cacheManager"/> <property name="realms"> <list> <ref bean="myrealm"/> </list> </property> </bean> <bean id="modelAuthricator" class="org.apache.shiro.authc.pam.ModularRealmAuthenticator"> <property name="authenticationStrategy" ref="firstSuccess"/> <property name="realms"> <list> <ref bean="myrealm"/> </list> </property> </bean> <bean id="firstSuccess" class="org.apache.shiro.authc.pam.FirstSuccessfulStrategy"/> <!--缓存管理--> <bean id="cacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager"/> <!-- 将shiro与spring集合 --> <bean id="shiroSecurityFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <!--<property name="filters">--> <!--<map>--> <!--<entry key="captchaAuthc" value-ref="captchaAuthenticationFilter" />--> <!--<entry key="kickout" value-ref="kickoutSessionControlFilter" />--> <!--<entry key="noaccess" value-ref="noAccessControlFilter"/>--> <!--<entry key="pmlogout" value-ref="pmLogoutFilter"/>--> <!--<entry key="authc" value-ref="pmAuthcFilter"/>--> <!--</map>--> <!--</property>--> <!-- shiro的核心安全接口 --> <property name="securityManager" ref="securityManager" /> <property name="loginUrl" value="/login" /> <property name="successUrl" value="/index" /> <property name="unauthorizedUrl" value="/unauthorized" /> <!-- shiro连接约束配置,在这里使用自定义的动态获取资源类 --> <!--<property name="filterChainDefinitionMap" ref="chainDefinitionSectionMetaSource" />--> <property name="filterChainDefinitions"> <value> /login = anon /hello = anon /** = authc </value> </property> </bean> </beans> 求大神指教 谢谢

shiro中自定义realm不被调用

![图片说明](https://img-ask.csdn.net/upload/201701/07/1483781798_312114.jpg) 我在xml文件中使用shiro调用自定义的realm进行验证,但每次输入用户名和密码确认后,页面始终停留在登录页面,realm根本没有执行,怎么解决? ![图片说明](https://img-ask.csdn.net/upload/201701/07/1483783199_980372.jpg) ![图片说明](https://img-ask.csdn.net/upload/201701/07/1483783184_949156.jpg) ![图片说明](https://img-ask.csdn.net/upload/201701/07/1483788563_775404.jpg)

shiro怎么进行URL授权

shiro中怎么通过数据库方式,将一个URL资源授权给某个用户、角色?

使用shiro时候自定义FormAuthenticationFilter不能执行

在配置自定义表单过滤器的时候在shiroFilter中配置了<entry key="authc" value-ref="formAuthenticationCookieFilter"/> 但是在执行的时候却没有走自定义的filter, 请问影响因素可能有哪些呢? 有没有人之前出现过同样的情况 求帮助

shiro不调用realm直接进入自己的方法

拦截器会进行拦截调用login方法,但是拦截后不调用自定义的realm方法,直接返回结果,下面是配置 ![web.xml配置](https://img-ask.csdn.net/upload/201707/05/1499225931_362277.jpg) ![shiro配置](https://img-ask.csdn.net/upload/201707/05/1499226003_135552.jpg) ![springmvc配置](https://img-ask.csdn.net/upload/201707/05/1499226071_508895.jpg) ![customRealm](https://img-ask.csdn.net/upload/201707/05/1499226139_244643.jpg)

Shiro SessionDAO是在什么情况下执行?

自定义的sessionDAO,请问大佬们,是用户登录时自动执行,还是需要手动调用阿? ``` <bean id="redisSessionDAO" class="com.shiro.SessionDao"> <property name="redisUtil" ref="redisUtil"></property> </bean> <!--sessionManager --> <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"> <property name="sessionDAO" ref="redisSessionDAO"></property> <property name="globalSessionTimeout" value="60000" /> <!-- 删除失效session --> <property name="sessionValidationSchedulerEnabled" value="true" /> </bean> ```

shiro用户权限始终是登录的第一个用户的权限?

小白一枚,在使用springboot+shiro的时候,发现一个问题,使用注解来判断 用户是否具有该权限时, ``` @RequiresRoles(value = {"admin"},logical = Logical.AND) ``` 退出当前用户后 ``` Subject subject = SecurityUtils.getSubject(); subject.logout(); ``` shiro始终使用的是第一个登录用户的权限角色信息, 也就是说如果我第一次登录admin用户后,访问带有权限验证的注解时,shiro会去调用方法如下 ``` AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) ``` 我在这里去构建了该用户的权限,我了解shiro会缓存用户的认证和授权,但是用户退出后,shiro依然缓存上一个用户的权限。 因为没太明白shiro对授权这一块是否有缓存,或者说缓存机制是怎么样的,所以这个问题一直没解决。

shiro授权问题,远程调用接口,无法跳转登录后界面

现在A系统通过传递账号密码调用B系统的登录接口实现登录,提示登录成功后,但是B系统shiro没有给账号授权,页面没法跳转登录后的页面,跳转到了login页面,不知道哪位大佬搞过这种?

【已解决】springboot2.x+shiro+redis怎么获取存在redis中的Authorization

我现在用shiro作为权限验证框架使用 启用了setAuthorizationCachingEnabled用redis缓存授权信息 realm里的doGetAuthorizationInfo里authorizationInfo有储存权限信息 已知SecurityUtils.getSubject().getPrincipal()可以获取到当前登录的user shiro有没有类似方法可以获取到当前用户的权限信息 我只需要获取redis里存的,不需要其他的实现方式 ![图片说明](https://img-ask.csdn.net/upload/202005/28/1590659329_280091.png)

shiro 结合 ajax 返回 json 的解决方案

这个是我的shiro配置文件 ``` <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <!-- shiro的第三步 spring文件里面配置Shiro--> <!-- 3.1 配置SecurityManager 安全管理器--> <!-- SecurityManager : 安全管理器,主体认证和授权都是通过SecurityManager进行--> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <!-- 3.1.1 注入 cacheManager 缓存管理器 --> <property name="cacheManager" ref="cacheManager" /> <!-- 3.1.2 注入 authenticator 属性赋值(下面会配置这个属性)--> <property name="authenticator" ref="authenticator"/> <!-- realm 域:相当于数据源,通过realm存取认证,授权相关数据 --> <property name="realms"> <list> <!-- 加载一个自定义的realm --> <ref bean="jdbcRealm"/> </list> </property> <!-- 记住我 的时间长--> <property name="rememberMeManager.cookie.maxAge" value="100"></property> </bean> <!-- 3.2配置cacheManager 缓存管理器 --> <!-- 3.2.1需要加入ehcache的jar包 + ehcache.xml配置文件 --> <!-- cacheManager : 缓存管理器,主要针对session和授权数据进行缓存 --> <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager"> <!-- 将数据通过 cacheManager + ehcache整合对缓存数据进行管理--> <property name="cacheManagerConfigFile" value="classpath:shiro-ehcache.xml" /> </bean> <!-- 3.3 配置 authenticator 认证器:主体进行认证最终通过authenticator进行 --> <bean id="authenticator" class="org.apache.shiro.authc.pam.ModularRealmAuthenticator"> <property name="authenticationStrategy"> <bean class="org.apache.shiro.authc.pam.AtLeastOneSuccessfulStrategy"></bean> </property> </bean> <!-- shiro第四步配置自定义realm --> <!-- realm : 域,相当于数据源 ,通过realm存取认证,授权相关数据 --> <!-- 4.1配置Realm + 重写Realm类--> <bean id="jdbcRealm" class="com.leon.ssms.shiro.ShiroRealm"> <!-- 4.2 MD5加密配置 --> <property name="credentialsMatcher"> <bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher"> <property name="hashAlgorithmName" value="MD5"></property> <property name="hashIterations" value="1024"></property> </bean> </property> </bean> <!-- shiro第五步 配置LifecycleBeanPostProcessor --> <!-- 5.配置LifecycleBeanPostProcessor 可以自动的来调用配置在Spring IOC 容器中 shiro bean 的生命周期方法。 --> <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/> <!-- shiro第六步 启用IOC容器中 使用shiro注解--> <!-- 6.启用IOC容器中 使用shiro注解。但必须在配置lifecycleBeanPostProcessor 之后在可以使用。 --> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor" /> <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager"/> </bean> <!-- shiro第七步 配置shiroFilter--> <!-- 7.1 id必须和web.xml文件中配置的DelegatingFilterProxy 的<filter-name>一致 --> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager" /> <!-- 登录页面 ,用户 登录不成功自动 返回该页面 --> <property name="loginUrl" value="/login.jsp"/> <!-- 登录成功页面,登录成功后跳转到该页面 --> <property name="successUrl" value="/home.action" /> <!-- 无权访问跳转页面 --> <property name="unauthorizedUrl" value="/unauthorized.action"/> <!-- 7.2 配置 filterChainDefinitionMap 属性 --> <!-- 将原先写死的认证和权限数据通过 Map的Key和Value的形式通过实例工厂类方法从数据库获取 --> <property name="filterChainDefinitionMap" ref="filterChainDefinitionMap"/> <!-- 配置哪些页面需要受保护以及访问这些页面需要的权限 --> <!-- 1).anon 可以匿名访问 2).autch 必须认证(需要登录)后才可以访问的页面 3).logout 登出 4).roles 角色权限 <property name="filterChainDefinitions"> <value> /login.jsp = anon /user/login.action = anon /user/logout.action = logout /user.jsp = roles[user] /admin.jsp = roles[admin] /** = authc </value> </property>--> </bean> <!-- 配置一个 bean, 该 bean 实际上是一个 Map. 通过实例工厂方法的方式 --> <bean id="filterChainDefinitionMap" factory-bean="FilterChainDefinitionMapBuilder" factory-method="builderFilterChainDefinitionMap"> </bean> <bean id="FilterChainDefinitionMapBuilder" class="com.leon.ssms.factory.FilterChainDefinitionMapBuilder"> </bean> </beans> ```

关于shiro的问题,subject.login的执行流程

subject.login(token),这个方法是去判断用户密码是否正确的,我知道 他会调用AuthorizingRealm子类里面的doGetAuthenticationInfo方法去校验, 但是我想知道login是如何走到这个方法的,并且 AuthorizingRealm子类是如何配置成 shiro的校验类的, 我们项目中有一个ShiroConfig,AuthorizingRealm子类上方有个@Bean,是不是只要注入到spring中,shiro会自动去找?

ssm shiro登录成功后跳转到后台页面但授权报错

正常来说,用户登录之后跳转home页,如果发现没有登录成功再跳回登录页,初次使用shiro框架,不知道哪里配置错误了,现在遇到的情况是抛错+跳回登录页 org.apache.shiro.authc.AuthenticationException at com.pay.service.auth.ShiroRealm.doGetAuthenticationInfo(ShiroRealm.java:51) at org.apache.shiro.realm.AuthenticatingRealm.getAuthenticationInfo(AuthenticatingRealm.java:568) at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doSingleRealmAuthentication(ModularRealmAuthenticator.java:180) at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doAuthenticate(ModularRealmAuthenticator.java:267) at org.apache.shiro.authc.AbstractAuthenticator.authenticate(AbstractAuthenticator.java:198) at org.apache.shiro.mgt.AuthenticatingSecurityManager.authenticate(AuthenticatingSecurityManager.java:106) at org.apache.shiro.mgt.DefaultSecurityManager.login(DefaultSecurityManager.java:270) at org.apache.shiro.subject.support.DelegatingSubject.login(DelegatingSubject.java:256) at com.pay.controller.UserController.login(UserController.java:32) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) at javax.servlet.http.HttpServlet.service(HttpServlet.java:650) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source) ``` ``` 正常的流程: 登录-校验通过-后台首页-如果校验不通过,返回登录页 抛的错误在上面,麻烦各位给分析分析,谢谢!

shiro不能导包,导报错误

Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); 将org.apache.shiro.mgt.SecurityManager写成SecurityManager,然后在导包就会出现错误,只能写成不到包的形式,这是为什么

shiro 登录认证页面不跳转

认证是没有问题的,登录之后一直在登录页面,然后直接输入index.jsp又是可以访问的, 说明认证成功了 直接上图帐号代码,求大神。。。 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> <!-- web.xml中shiro的filter对应的bean --> <!-- Shiro 的Web过滤器 --> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager"/> <!-- loginUrl认证提交地址,如果没有认证将会请求此地址进行认证,请求此地址将由formAuthenticationFilter进行表单认证 --> <property name="loginUrl" value="/login/login.html"/> <!-- 认证成功统一跳转到first.action,建议不配置,shiro认证成功自动到上一个请求路径 --> <property name="successUrl" value="/index.jsp"/> <!-- 通过unauthorizedUrl指定没有权限操作时跳转页面--> <!--<property name="unauthorizedUrl" value="/WEB-INF/pages/refuse.jsp"/>--> <!-- 自定义filter配置 --> <property name="filters"> <map> <!--将自定义 的FormAuthenticationFilter注入shiroFilter中--> <entry key="authc" value-ref="formAuthenticationFilter"/> </map> </property> <!-- 过虑器链定义,从上向下顺序执行,一般将/**放在最下边 --> <property name="filterChainDefinitions"> <value> <!-- 对静态资源设置匿名访问 --> /css/** = anon /datas/** = anon /html/** = anon /images/** = anon /js/** = anon /plugins/** = anon /temp/** = anon /login/login.html = anon /login/checkLogin.json = anon <!--请求这个地址退出登录 shiro清除session--> /login/logout = logout <!--所有url都必须认证通过才可以访问--> /** = authc <!--anon所有url都可以匿名访问--> <!--/** = anon--> </value> </property> </bean> <!-- securityManager安全管理器 --> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="customRealm"/> <!-- 注入缓存管理器 --> <!--<property name="cacheManager" ref="cacheManager"/>--> <!-- 注入session管理器 --> <!--<property name="sessionManager" ref="sessionManager"/>--> <!-- 记住我 --> <!--<property name="rememberMeManager" ref="rememberMeManager"/>--> </bean> <!-- realm --> <bean id="customRealm" class="com.infore.common.CustomRealm"> </bean> <!-- 缓存管理器 --> <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager"> <property name="cacheManagerConfigFile" value="classpath:/shiro/shiro-ehcache.xml"/> </bean> <bean id="formAuthenticationFilter" class="com.infore.common.CustomFormAuthenticationFilter"> <!-- 表单中账号的input名称 --> <property name="usernameParam" value="username" /> <!-- 表单中密码的input名称 --> <property name="passwordParam" value="password" /> </bean> <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager" /> </bean> </beans> @ResponseBody @RequestMapping("/checkLogin.json") public AjaxResult<String> checkLogin(HttpServletRequest request){ AjaxResult<String> result = new AjaxResult<String>(); String username = request.getParameter("username"); String password = request.getParameter("password"); try{ /*if(username == null || "".equals(username)){ result.setSuccess(false); result.setMsg("请输入账号"); return result; } if(password == null || "".equals(password)){ result.setSuccess(false); result.setMsg("请输入密码"); return result; } EmpDto emp = empService.selectByUsername(username); if(emp == null){ result.setSuccess(false); result.setMsg("账号不存在"); return result; }**/ ByteSource salt = ByteSource.Util.bytes("emp"); SimpleHash simpleHash = new SimpleHash("MD5", password, salt, 2); String password_md5 = simpleHash.toString(); /*if(!emp.getPassword().equals(password_md5)){ result.setSuccess(false); result.setMsg("密码不正确"); return result; }*/ UsernamePasswordToken token = new UsernamePasswordToken(username, password_md5); Subject currentUser = SecurityUtils.getSubject(); //使用shiro来验证 token.setRememberMe(true); try { currentUser.login(token); EmpDto empDto = (EmpDto) currentUser.getPrincipal(); logger.info("User [" + empDto.getUsername() + "] logged in successfully."); //验证通过保存emp信息 super.getSession().setAttribute("emp", currentUser.getPrincipal()); super.getSession().setAttribute("username", username); super.getSession().setAttribute("empNo", empDto.getEmpNo()); } catch ( UnknownAccountException uae ) { uae.printStackTrace(); result.setSuccess(false); result.setMsg("账号不存在"); return result; } catch ( IncorrectCredentialsException ice ) { ice.printStackTrace(); result.setSuccess(false); result.setMsg("账号/密码不正确"); return result; } catch (LockedAccountException lae) { lae.printStackTrace(); result.setSuccess(false); result.setMsg("用户已被锁定"); return result; } catch (ExcessiveAttemptsException eae ) { eae.printStackTrace(); } }catch (Exception e){ logger.error("验证登录信息异常[checkLogin]",e); publicUtil.insertLog(0,e,0); result.setSuccess(false); result.setMsg("验证登录信息异常"); } return result; } /** * realm的认证方法,从数据库查询用户信息 * @param authToken * @return * @throws AuthenticationException */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authToken) throws AuthenticationException { UsernamePasswordToken token = (UsernamePasswordToken) authToken; EmpDto emp = empService.selectByUsername(token.getUsername()); if(emp == null){ throw new UnknownAccountException("账号不存在"); } SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(emp, emp.getPassword(), getName()); return simpleAuthenticationInfo; }

shiro登陆认证失败(nginx做代理)

总是认证失败,并不是用户名或密码错误,认证的方法成功执行无异常,之后却不能访问其他页面,跟没有登陆过一样。 我的项目发布到tomcat下名称是pay 当我修改了我项目的Web Context-root = / 即项目作为ROOT发布到tomcat下,就一切正常。 如果不修改Web Context-root = / 改怎么解决 已经困扰一段时间了,哪位同学可遇到过,还请指点一二啊 具体配置如下: nginx配置 ![图片说明](https://img-ask.csdn.net/upload/201511/25/1448449535_328663.png) 登陆的页面是:http://pay.fushikang.com/mg/login.jsp 下面是登陆的controller方法,此方法正常执行完毕 ![图片说明](https://img-ask.csdn.net/upload/201511/25/1448449562_899147.png) 下面是重写的Realm类,登陆认证方法 ![图片说明](https://img-ask.csdn.net/upload/201511/25/1448449675_971463.png) 下面是配置文件 spring-shiro.xml ![图片说明](https://img-ask.csdn.net/upload/201511/25/1448449688_392681.png)

想把shiro进行封装打jar包,方便以后其他项目重复使用,我该怎么办。。。?

想把shiro进行封装打jar包,方便以后其他项目重复使用,但是shiro方法参数都是封装好的,我该怎么办。。。? ``` package com.zns.shiro.config; import at.pollux.thymeleaf.shiro.dialect.ShiroDialect; import com.zns.shiro.domain.User; import com.zns.shiro.service.UserService; import org.apache.catalina.security.SecurityUtil; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.credential.HashedCredentialsMatcher; import org.apache.shiro.codec.Base64; 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.subject.Subject; import org.apache.shiro.web.mgt.CookieRememberMeManager; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.apache.shiro.web.servlet.SimpleCookie; import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.LinkedHashMap; import java.util.Map; /** * @功能描述:Shiro配置类 * @创建日期: 2019/5/6 18:46 */ @Configuration public class ShiroConfig { @Autowired private UserService userService; /** * 密码校验规则HashedCredentialsMatcher * 这个类是为了对密码进行编码的 , * 防止密码在数据库里明码保存 , 当然在登陆认证的时候 , * 这个类也负责对form里输入的密码进行编码 * 处理认证匹配处理器:如果自定义需要实现继承HashedCredentialsMatcher */ @Bean("hashedCredentialsMatcher") public HashedCredentialsMatcher hashedCredentialsMatcher() { HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher(); //指定加密方式为MD5 credentialsMatcher.setHashAlgorithmName("MD5"); //加密次数 credentialsMatcher.setHashIterations(1024); credentialsMatcher.setStoredCredentialsHexEncoded(true); return credentialsMatcher; } /** * 创建ShiroFilterFactoryBean * shiro过滤bean */ @Bean public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager securityManager){ ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); // 设置安全管理器 shiroFilterFactoryBean.setSecurityManager(securityManager); // 添加Shiro内置过滤器 /** * Shiro内置过滤器,可以实现权限相关的拦截器 * 常用的过滤器: * anon: 无需认证(登录)可以访问 * authc: 必须认证才可以访问 * user: 如果使用rememberMe功能可以直接访问 * perms: 该资源必须得到资源权限才可以访问 * role: 该资源必须得到角色权限才可以访问 */ Map<String, String> filerMap = new LinkedHashMap<>(); //顺序的map //配置记住我或认证通过可以访问的地址 filerMap.put("/testThymeleaf", "user"); //如果没有拦截,默认会跳转到login.jsp,可以通过setLoginUrl设置登录页面 //filerMap.put("/add","authc"); //filerMap.put("/update","authc"); filerMap.put("/testThymeleaf","anon"); filerMap.put("/login","anon"); //授权过滤器 filerMap.put("/add","perms[user:add]"); filerMap.put("/update","perms[user:update]"); filerMap.put("/*","authc"); //设置登录的页面,发送toLogin请求 shiroFilterFactoryBean.setLoginUrl("/toLogin"); //设置未授权的页面 shiroFilterFactoryBean.setUnauthorizedUrl("/noAuth"); //设置过滤器 shiroFilterFactoryBean.setFilterChainDefinitionMap(filerMap); return shiroFilterFactoryBean; } /** * 创建DefaultWebSecurityManager */ @Bean(name = "securityManager") public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); // 关联realm securityManager.setRealm(userRealm); securityManager.setRememberMeManager(rememberMeManager()); return securityManager; } /** * 创建Realm */ @Bean(name = "userRealm") public UserRealm getRealm(){ return new UserRealm(); } /** * 配置ShiroDialect,用于thymeleaf和shiro标签配合使用 */ @Bean public ShiroDialect getShiroDialect(){ return new ShiroDialect(); } /** * Spring的一个bean , 由Advisor决定对哪些类的方法进行AOP代理 . * @return */ @Bean public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { DefaultAdvisorAutoProxyCreator creator = new DefaultAdvisorAutoProxyCreator(); creator.setProxyTargetClass(true); return creator; } /** * lifecycleBeanPostProcessor是负责生命周期的 , 初始化和销毁的类 * (可选) */ @Bean("lifecycleBeanPostProcessor") public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { return new LifecycleBeanPostProcessor(); } /** 2 * cookie对象; 3 * rememberMeCookie()方法是设置Cookie的生成模版,比如cookie的name,cookie的有效时间等等。 4 * @return 5 */ @Bean public SimpleCookie rememberMeCookie(){ //System.out.println("ShiroConfiguration.rememberMeCookie()"); //这个参数是cookie的名称,对应前端的checkbox的name = rememberMe SimpleCookie simpleCookie = new SimpleCookie("rememberMe"); //<!-- 记住我cookie生效时间30天 ,单位秒;--> simpleCookie.setMaxAge(259200); return simpleCookie; } /** * cookie管理对象; * rememberMeManager()方法是生成rememberMe管理器,而且要将这个rememberMe管理器设置到securityManager中 * @return */ @Bean public CookieRememberMeManager rememberMeManager(){ //System.out.println("ShiroConfiguration.rememberMeManager()"); CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager(); cookieRememberMeManager.setCookie(rememberMeCookie()); //rememberMe cookie加密的密钥 建议每个项目都不一样 默认AES算法 密钥长度(128 256 512 位) cookieRememberMeManager.setCipherKey(Base64.decode("2AvVhdsgUs0FSA3SDFAdag==")); return cookieRememberMeManager; } } ```package com.zns.shiro.config; import com.zns.shiro.domain.User; import com.zns.shiro.service.UserService; 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.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ByteSource; import org.springframework.beans.factory.annotation.Autowired; /** * @功能描述:TODO * @创建日期: 2019/5/6 18:56 */ public class UserRealm extends AuthorizingRealm { @Autowired private UserService userService; /** * 执行授权逻辑 */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { System.out.println("执行授权逻辑"); //给资源进行授权 SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); //获取当前登录用户 Subject subject = SecurityUtils.getSubject(); User user = (User)subject.getPrincipal(); //System.out.println(subject.getPrincipal()); User dbUser = userService.findById(user.getId()); // info.addStringPermission("user:add"); info.addStringPermission(dbUser.getPerms()); return info; } /** * 执行认证逻辑 */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { System.out.println("执行认证逻辑"); //编写shiro判断逻辑,判断用户名和密码 UsernamePasswordToken token = (UsernamePasswordToken)authenticationToken; // //根据用户名查询数据库中对应的记录 User user = userService.findByName(token.getUsername()); //1、判断用户名 if(user == null){ //用户名不存在 return null; //shiro底层会抛出UnKnowAccountException } //2、判断密码, 这里的user是principal //return new SimpleAuthenticationInfo(user,user.getPassword(),getName()); //盐值 ByteSource credentialsSalt = ByteSource.Util.bytes(token.getUsername()); //封装用户信息,构建AuthenticationInfo对象并返回 AuthenticationInfo authcInfo = new SimpleAuthenticationInfo(user, user.getPassword(), credentialsSalt, getName()); return authcInfo; } } ``` ```

关于shiro在跨域情况下的验证码存session取不到的问题请教下会shiro的大神们。

(后端springboot整合shiro,前端vue) shiro配置 参考文章 https://blog.csdn.net/qq_34021712/article/details/80470738 在跨域的情况下 (两台机器,前端8080端口访问后台8081端口),后端就写了2个接口验证码接口和登录接口 。 问题描述:请求验证码接口以后把验证码存到shiro的session里面并返给前端页面展示(没问题),问题出在登录的时候,登录接口首先从session里获取验证码为null,我看过session不是同一个,这是怎么回事呢?(当我把前端代码和后端都放在一台机器上运行没有问题) filter拦截验证码请求的response我设置了跨域* 还是没有解决,是否和shiro的配置有关呢?

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解!

CSDN:因博主近期注重写专栏文章(已超过150篇),订阅博主专栏人数在突增,近期很有可能提高专栏价格(已订阅的不受影响),提前声明,敬请理解! 目录 博客声明 大数据了解博主粉丝 博主的粉丝群体画像 粉丝群体性别比例、年龄分布 粉丝群体学历分布、职业分布、行业分布 国内、国外粉丝群体地域分布 博主的近期访问每日增量、粉丝每日增量 博客声明 因近期博主写专栏的文章越来越多,也越来越精细,逐步优化文章。因此,最近一段时间,订阅博主专栏的人数增长也非常快,并且专栏价

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

培训班出来的人后来都怎么样了?(二)

接着上回说,培训班学习生涯结束了。后面每天就是无休止的背面试题,不是没有头脑的背,培训公司还是有方法的,现在回想当时背的面试题好像都用上了,也被问到了。回头找找面试题,当时都是打印下来天天看,天天背。 不理解呢也要背,面试造飞机,上班拧螺丝。班里的同学开始四处投简历面试了,很快就有面试成功的,刚开始一个,然后越来越多。不知道是什么原因,尝到胜利果实的童鞋,不满足于自己通过的公司,嫌薪水要少了,选择...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

工作八年,月薪60K,裸辞两个月,投简历投到怀疑人生!

近日,有网友在某职场社交平台吐槽,自己裸辞两个月了,但是找工作却让自己的心态都要崩溃了,全部无果,不是已查看无回音,就是已查看不符合。 “工作八年,两年一跳,裸辞两个月了,之前月薪60K,最近找工作找的心态崩了!所有招聘工具都用了,全部无果,不是已查看无回音,就是已查看不符合。进头条,滴滴之类的大厂很难吗???!!!投简历投的开始怀疑人生了!希望 可以收到大厂offer” 先来看看网...

97年世界黑客编程大赛冠军作品(大小仅为16KB),惊艳世界的编程巨作

这是世界编程大赛第一名作品(97年Mekka ’97 4K Intro比赛)汇编语言所写。 整个文件只有4095个字节, 大小仅仅为16KB! 不仅实现了3D动画的效果!还有一段震撼人心的背景音乐!!! 内容无法以言语形容,实在太强大! 下面是代码,具体操作看最后! @echo off more +1 %~s0|debug e100 33 f6 bf 0 20 b5 10 f3 a5...

不要再到处使用 === 了

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢?我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了,因此建议总是使用===。这些都...

什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!

A站 AcFun弹幕视频网,简称“A站”,成立于2007年6月,取意于Anime Comic Fun,是中国大陆第一家弹幕视频网站。A站以视频为载体,逐步发展出基于原生内容二次创作的完整生态,拥有高质量互动弹幕,是中国弹幕文化的发源地;拥有大量超粘性的用户群体,产生输出了金坷垃、鬼畜全明星、我的滑板鞋、小苹果等大量网络流行文化,也是中国二次元文化的发源地。 B站 全称“哔哩哔哩(bilibili...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

MySQL性能优化(五):为什么查询速度这么慢

前期回顾: MySQL性能优化(一):MySQL架构与核心问题 MySQL性能优化(二):选择优化的数据类型 MySQL性能优化(三):深入理解索引的这点事 MySQL性能优化(四):如何高效正确的使用索引 前面章节我们介绍了如何选择优化的数据类型、如何高效的使用索引,这些对于高性能的MySQL来说是必不可少的。但这些还完全不够,还需要合理的设计查询。如果查询写的很糟糕,即使表结构再合理、索引再...

用了这个 IDE 插件,5分钟解决前后端联调!

点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!作者 |李海庆我是一个 Web 开发前端工程师,受到疫情影响,今天是我在家办公的第78天。开发了两周,...

大厂的 404 页面都长啥样?最后一个笑了...

每天浏览各大网站,难免会碰到404页面啊。你注意过404页面么?猿妹搜罗来了下面这些知名网站的404页面,以供大家欣赏,看看哪个网站更有创意: 正在上传…重新上传取消 腾讯 正在上传…重新上传取消 网易 淘宝 百度 新浪微博 正在上传…重新上传取消 新浪 京东 优酷 腾讯视频 搜...

【高并发】高并发秒杀系统架构解密,不是所有的秒杀都是秒杀!

网上很多的文章和帖子中在介绍秒杀系统时,说是在下单时使用异步削峰来进行一些限流操作,那都是在扯淡! 因为下单操作在整个秒杀系统的流程中属于比较靠后的操作了,限流操作一定要前置处理,在秒杀业务后面的流程中做限流操作是没啥卵用的。

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

Java14 新特性解读

Java14 已于 2020 年 3 月 17 号发布,官方特性解读在这里:https://openjdk.java.net/projects/jdk/14/以下是个人对于特性的中文式...

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

疫情后北上广深租房价格跌了吗? | Alfred数据室

去年3月份我们发布了《北上广深租房图鉴》(点击阅读),细数了北上广深租房的各种因素对租房价格的影响。一年过去了,在面临新冠疫情的后续影响、城市尚未完全恢复正常运转、学校还没开学等情况下...

面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?

点击上方“朱小厮的博客”,选择“设为星标”后台回复&#34;1024&#34;领取公众号专属资料本文以一个简单的程序开头——数组赋值:int LEN = 10000; int[][] ...

又一起程序员被抓事件

就在昨天互联网又发生一起让人心酸的程序员犯罪事件,著名的百度不限速下载软件 Pandownload PC 版作者被警方抓获。案件大致是这样的:软件的作者不仅非法盗取用户数据,还在QQ群进...

应聘3万的职位,有必要这么刁难我么。。。沙雕。。。

又一次被面试官带到坑里面了。面试官:springmvc用过么?我:用过啊,经常用呢面试官:springmvc中为什么需要用父子容器?我:嗯。。。没听明白你说的什么。面试官:就是contr...

太狠了,疫情期间面试,一个问题砍了我5000!

疫情期间找工作确实有点难度,想拿到满意的薪资,确实要点实力啊!面试官:Spring中的@Value用过么,介绍一下我:@Value可以标注在字段上面,可以将外部配置文件中的数据,比如可以...

Intellij IDEA 美化指南

经常有人问我,你的 IDEA 配色哪里搞的,我会告诉他我自己改的。作为生产力工具,不但要顺手而且更要顺眼。这样才能快乐编码,甚至降低 BUG 率。上次分享了一些 IDEA 有用的插件,反...

【相亲】96年程序员小哥第一次相亲,还没开始就结束了

颜值有点高,条件有点好

太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

一图看完本文 一、 计算机网络体系结构分层 计算机网络体系结构分层 计算机网络体系结构分层 不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。 二、 TCP/IP 基础 1. TCP/IP 的具体含义 从字面意义上讲,有人可能会认为...

腾讯面试题: 百度搜索为什么那么快?

我还记得去年面腾讯时,面试官最后一个问题是:百度/google的搜索为什么那么快? 这个问题我懵了,我从来没想过,搜素引擎的原理是什么 然后我回答:百度爬取了各个网站的信息,然后进行排序,当输入关键词的时候进行文档比对……巴拉巴拉 面试官:这不是我想要的答案 我内心 这个问题我一直耿耿于怀,终于今天,我把他写出来,以后再问,我直接把这篇文章甩给他!!! 两个字:倒排,将贯穿整篇文章,也是面试官...

相关热词 c# 按行txt c#怎么扫条形码 c#打包html c# 实现刷新数据 c# 两个自定义控件重叠 c#浮点类型计算 c#.net 中文乱码 c# 时间排序 c# 必备书籍 c#异步网络通信
立即提问