java权限框架 Shiro配置问题

zsjg13 发布于 2012/05/08 10:48
阅读 4K+
收藏 0

下面的配置,只要去掉/** = authc,就可以成功登录至系统首页,但只要加上,提交登录表单始终停留在登录页面,为什么呢。

难道是/index.jsp,符合了/**模式,被认证过滤器拦截了?但不是已经登录了吗,应该让它过去,不明白。

<bean id="shiroFilter" class="com.ahunis.modules.security.shiro.ShiroFilterFactoryBean">

        <property name="securityManager" ref="securityManager"/>
        <property name="loginUrl" value="/framework/sys/login!loginPage.action" />
        <property name="successUrl" value="/index.jsp"></property>
        <property name="filters">
            <map>
                <entry key="myauthfilter" value-ref="myauthorityfilter"></entry>
            </map>
        </property>
        <property name="filterChainDefinitions">
            <value>
                /secure/** = authc
                /framework/sys/login!loginPage.action = authc
                /framework/sys/login!logout.action = logout
                /common/**=anon
                /amcharts/** = anon
                /css/** = anon
                /e3/** = anon
                /fileStorage/** = anon
                /images/** = anon
                /img/** = anon
                /js/** = anon
                /menu/** = anon
                /skins/** = anon
                /** = authc
            </value>
        </property>
       
    </bean>
加载中
0
李渊
李渊
看下你登录时的代码。
zsjg13
zsjg13
登录已经交给Shiro的authc过滤器去做了,我的Action中只写了 /** * 登录页 * @return * @throws Exception */ public String loginPage() throws Exception { return "loginPage"; }
0
李渊
李渊
public String execute() {
		Subject subject = SecurityUtils.getSubject();
		UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(), user.getPassword());
		try {
			subject.login(token);
		} catch (UnknownAccountException uae) {
			logger.warn(String.format("who %s , where %s , warn : %s", token.getUsername(), token.getHost(), uae));
			return ActionSupport.INPUT;
		} catch (IncorrectCredentialsException ice) {
			logger.warn(String.format("who %s , where %s , warn : %s", token.getUsername(), token.getHost(), ice));
			return ActionSupport.INPUT;

		} catch (LockedAccountException lae) {
			logger.warn(String.format("who %s , where %s , warn : %s", token.getUsername(), token.getHost(), lae));

			return ActionSupport.INPUT;
		} catch (ExcessiveAttemptsException eae) {
			logger.warn(String.format("who %s , where %s , warn : %s", token.getUsername(), token.getHost(), eae));
			return ActionSupport.INPUT;
		} catch (Exception ee) {
			logger.warn(String.format("who %s , where %s , warn : %s", token.getUsername(), token.getHost(), ee));
			return ActionSupport.INPUT;
		}

		SecurityUtils.getSubject().getSession().setAttribute("currentUser", User.findby(token.getUsername()));
		success = true;
		pid = getCurrentPerson().getId();
		logger.warn(String.format("who %s , where %s login success", token.getUsername(), token.getHost()));
		return ActionSupport.SUCCESS;
	}

不知你是怎么做的。

我是这样做的。

zsjg13
zsjg13
嗯,你所讲的这种方式我一开始也写过,但只要在配置文件中配置了 /framework/sys/login!loginPage.action = authc (意思是跳到登录页面需要认证,这个认证由authc过滤器来进行登录认证) 其实就不需要再写登录方法了
0
李渊
李渊
authc 怎么帮你认证的?你再怎么也要输入帐号密码吧。也要和后台对比吧。
zsjg13
zsjg13
是啊,你看下SpringSide3.0.0RC3中的miniWeb程序,它里面的实际登录方法就什么都没写。然后你看下它的类上的注释就知道了
返回顶部
顶部