shiro登录认证出错

Troyturk 2015-12-02 10:11:39
也不报错,就是输入用户名和密码之后一直返回的是原来的登录页面

这是我的spring-shiro-web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:util="http://www.springframework.org/schema/util"
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
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

<!-- Realm实现 -->
<bean id="userRealm" class="com.moon.shiro.UserRealm"/>


<!-- 安全管理器 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="userRealm"/>
</bean>


<!-- Shiro的Web过滤器 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="/user/login.action"/>

<property name="successUrl" value="/user/gouser.action"/>
<property name="unauthorizedUrl" value="/unauthorized.jsp"/>

<property name="filterChainDefinitions">
<value>
<!-- 对静态资源设置匿名访问 -->
/images/** = anon
/js/** = anon
/css/** = anon
/assets/** = anon

/index.jsp = anon
/user.jsp = authc
/unauthorized.jsp = anon
/login.jsp = authc
/logout = logout
/** = authc
</value>
</property>
</bean>

</beans>


这是我的UserRealm:
public class UserRealm extends AuthorizingRealm {

private UserService userService;

public void setUserService(UserService userService) {
this.userService = userService;
}

@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
// String username = (String)principals.getPrimaryPrincipal();
//
// SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
// authorizationInfo.setRoles(userService.findRoles(username));
// authorizationInfo.setStringPermissions(userService.findPermissions(username));
//
// return authorizationInfo;
return null;
}

@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {

String username = (String)token.getPrincipal();

User user = userService.findByUsername(username);

if(user == null) {
throw new UnknownAccountException();//没找到帐号
}



//交给AuthenticatingRealm使用CredentialsMatcher进行密码匹配,如果觉得人家的不好可以自定义实现
SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(
user.getUserName(), //用户名
user.getPassword(), //密码
ByteSource.Util.bytes(user.getCredentialsSalt()),//salt=username+salt
getName() //realm name
);
return authenticationInfo;
}


这是我的LoginController部分:
	@RequestMapping(value = "/login"    )
public String showLoginForm(HttpServletRequest req, Model model) {
String exceptionClassName = (String)req.getAttribute("shiroLoginFailure");
String error = null;
if(UnknownAccountException.class.getName().equals(exceptionClassName)) {
error = "用户名/密码错误";
} else if(IncorrectCredentialsException.class.getName().equals(exceptionClassName)) {
error = "用户名/密码错误";
} else if(exceptionClassName != null) {
error = "其他错误:" + exceptionClassName;
}
model.addAttribute("error", error);
System.out.println("error: "+error);

// 此方法不处理登陆成功(认证成功),shiro认证成功会自动跳转到上一个请求路径
// 登陆失败还到login页面
return "user/login";
}


就是一直退回的是return "user/login";
话说这个方法不是不处理登录成功吗,
成功后不是会自动跳到我给它配的<property name="successUrl" value="/user/gouser.action"/> 去吗
请问问题出在哪里
...全文
1185 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
qq_15791115 2017-07-03
看懂了。 说一下可能发生的情况。 比如localhost:8080/ 这个时候 回被拦截 拦截到 localhost:8080/login.do 所以你登录成功了 说不定已经认证了, 只是他返回上一访问页 是localhost:8080/ 你可以直接在url输入其他地址 你debug会发现,已经认证通过了
回复
qq_15791115 2017-07-03
这个我也是研究了很久 说的是浏览器有一个浏览缓存。感觉就是successUrl是无效的玩意儿 我也纳闷了很久 不知道楼主你解决了没有
回复
胡xiao贤 2017-01-23
重点还是看你最后return的那个地址是什么啊 后面默认后html或者jsp的 看你配置文件了 跳转不是跳的successUrl
回复
Troyturk 2015-12-02
引用 1 楼 shijing266 的回复:
1、你login方法设置断点,监控方法一步步执行

2、你最后return的是 "user/login" 这个会根据你配置的视图解析器去寻找对应的jsp页面,你配置的login.jsp,那肯定获取user目录下寻找login.jsp的

我是结合教程来看的,我也不知道为什么,它上面说登录成功会自动跳转回上以页面或者配置的路径

可是我已经配置的了啊:
回复
1、你login方法设置断点,监控方法一步步执行 2、你最后return的是 "user/login" 这个会根据你配置的视图解析器去寻找对应的jsp页面,你配置的login.jsp,那肯定获取user目录下寻找login.jsp的
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2015-12-02 10:11
社区公告
暂无公告