Spring Security终于配通了,发现一两点要注意的细节。

__啊 发布于 2014/10/14 17:40
阅读 8K+
收藏 5

首先一个就是登录表单的action,必须是j_spring_secutity_check(默认),可以通过配置文件的<form-login>中的login-processing-url属性自定义action。不知道说到这里,大伙能不能明白。


其中的属性,百度一大堆,就不一一说明了。
<form-login login-page="/login.jsp"
					default-target-url="/main.jsp"
					authentication-failure-url="/login.action?error=1"
					always-use-default-target="true"
					/>

上面的xml代码,并没有login-processing-url这一属性,故登录表单的action,必须为j_spring_secutity_check。

若加上login-processing-url="/login"这句,表单代码就如下:

<!-- 默认就是action="j_spring_secutity_check" -->
<form method="post" action="/login">
            User Name:
		<input name="j_username" value="admin3" size="20" maxlength="50" type="text"/>
		<br />
		Password:
		<input name="j_password" value="123456" size="20" maxlength="50" type="password"/>
		<br />
		<input type="submit" value="Login"/>
        </form>
在此,有个很重要的细节,本人菜鸟,被这个细节坑了两三天。就是login-processing-url的值,切勿跟某个struts的action同名,不然会优先执行struts,直接绕过springsecurity配置文件的验证。即不会进入<form-login>标签,不会执行里面的设置。

==============================================================

第二点,是根据username做登录验证,并获取相应的权限资源时的小细节。

有没有试过将权限表里的一些权限资源字段改为""(长度为0的字符串)?

然后就会发现用户名密码都没错啊,但就是登录不上去。原因就在这,试试看。

把权限表的资源字段update为abcd,然后把其中一个改为"",看看能不能登录成功。我试验过,是登录不成功的。

说明一下,字段值为null是可以登录的。


加载中
0
小杨阿哥哥
小杨阿哥哥
你知道怎么用java API 判断当前的用户是否有某个权限吗? 除了人工的便利那个列表
小杨阿哥哥
小杨阿哥哥
回复 @hongframe : 我找到了~~ SpringSecuriy集成了ServletAPI,可以用request的hasRole方法。
__啊
__啊
回复 @小杨阿哥哥 : 没有,这种东西可以自己封装
小杨阿哥哥
小杨阿哥哥
回复 @hongframe : 必须要遍历一次吗,不知道有没有类似于hasRole之类的这样的方法。。
__啊
__啊
SecurityContextHolder.getContext().getAuthentication().getAuthorities(); 获取一个Collection,就可以遍历该用户下的所有权限。
0
h
hellotrms
请问 login-processing-url="/login" 这个里面的login地址是必须存在的servlet地址吗?
返回顶部
顶部