SpringSide中文论坛


 
标题: Spring security 如何判断登录状态
javaside
SpringSide社员
Rank: 1



UID 12107
精华 0
积分 21
帖子 21
阅读权限 10
注册 2008-9-27
状态 离线
发表于 2009-9-15 23:53  资料 短消息 
Spring security 如何判断登录状态

现在有个这么个需求

某个url ,只要用户处于登录状态,就可以访问,否则跳向登录页面,如何配置?
顶部
[广告]
mojiezhong05180
SpringSide初阶积极社员
Rank: 2Rank: 2



UID 8667
精华 0
积分 123
帖子 81
阅读权限 20
注册 2008-1-22
状态 离线
发表于 2009-9-16 15:40  资料 短消息 
你的意思应该是 通过Spring security 认证,就得以访问是吧!
顶部
javaside
SpringSide社员
Rank: 1



UID 12107
精华 0
积分 21
帖子 21
阅读权限 10
注册 2008-9-27
状态 离线
发表于 2009-9-16 21:48  资料 短消息 
是的,就是这个意思,有什么办法配置吗?
顶部
Lingo
SpringSide中阶积极社员
Rank: 3Rank: 3Rank: 3



UID 1089
精华 1
积分 262
帖子 135
阅读权限 20
注册 2006-12-21
状态 离线
发表于 2009-9-17 19:42  资料 短消息 
spring security的过滤器会自动判断

参考http://www.family168.com/oa/springsecurity/html/
顶部
javaside
SpringSide社员
Rank: 1



UID 12107
精华 0
积分 21
帖子 21
阅读权限 10
注册 2008-9-27
状态 离线
发表于 2009-9-18 18:36  资料 短消息 


QUOTE:
原帖由 <i>Lingo</i> 于 2009-9-17 19:42 发表<br />
spring security的过滤器会自动判断<br />
<br />
参考<a href="http://www.family168.com/oa/springsecurity/html/" target="_blank">http://www.family168.com/oa/springsecurity/html/</a>

<br />


但我如何配置呢,只要处于登录状态,就能访问指定的URL?

<intercept-url pattern="/test/.*" access="" />

这里的 access 我该填写什么?
顶部
Lingo
SpringSide中阶积极社员
Rank: 3Rank: 3Rank: 3



UID 1089
精华 1
积分 262
帖子 135
阅读权限 20
注册 2006-12-21
状态 离线
发表于 2009-9-19 00:21  资料 短消息 
http://www.family168.com/oa/springsecurity/html/ch004-custom-login.html
顶部
javaside
SpringSide社员
Rank: 1



UID 12107
精华 0
积分 21
帖子 21
阅读权限 10
注册 2008-9-27
状态 离线
发表于 2009-9-19 20:18  资料 短消息 


QUOTE:
原帖由 <i>Lingo</i> 于 2009-9-19 00:21 发表<br />
<a href="http://www.family168.com/oa/springsecurity/html/ch004-custom-login.html" target="_blank">http://www.family168.com/oa/spri ... 4-custom-login.html</a>

<br />

非常感谢你的回复

看了你们的文档,不过我还有点不明白。

<intercept-url pattern="/login.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY" />

你的意思是这样配吗?这样是所有的人都能访问该URL,其实我只想已登录的用户才能访问

感觉不符合我的需要。

想问一下,已登录的用户 是不是具有同一的角色,比如 IS_AUTHENTICATE。
如果有就好了,如下面:

<intercept-url pattern="/test/*" access="IS_AUTHENTICATED" />

这样就可以做到,只有登录的用户才能访问 /test/*下的资源。

当我始终没找到,有这么个角色,是试图 用 IS_AUTHENTICATE ,结果不行,还报错,提示不支持 IS_AUTHENTICATE。

顶部
isky8888
SpringSide社员
Rank: 1



UID 608
精华 0
积分 24
帖子 24
阅读权限 10
注册 2006-11-24
状态 离线
发表于 2009-9-21 22:19  资料 短消息 
每个用户都设置一个缺省角色ROLE_USER(不一定需要配置在数据库中,当然配置了会更清晰。不配置的话可以在认证的时候动态添加这个角色,只需要在User实现类中添加即可,后面有参考实现),然后配置如下:

<intercept-url pattern="/test/**" access="ROLE_USER" />

User类中参考的获取角色的方法
    /**
     * Return the authorities for Spring Security.
     */
    @Override
    public String[] grantedRoleNames() {
        String[] roleNames = null;
        if (roles != null) {
            roleNames = new String[roles.size() + 1];
            int index = 0;
            for (Role role : roles)
                roleNames[index++] = new String(role.getName());
        } else {
            roleNames = new String[1];
        }
        //ROLE_USER这个名字最好弄成可配置的
        roleNames[roleNames.length - 1] = "ROLE_USER";
        return roleNames;
    }

UserDetailServiceImpl的实现大致如下
public class UserDetailServiceImpl implements UserDetailsService {

    private UserAccoutService userManager;

    public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException, DataAccessException {
        UserAccout user = userManager.getUserByLoginName(userName);
        if (user == null)
            throw new UsernameNotFoundException(userName + " not found");

        String[] roles = user.grantedRoleNames();
        GrantedAuthority[] arrayAuths = new GrantedAuthority[roles.length];

        int index = 0;
        for (String roleName : roles) {
            arrayAuths[index++] = new GrantedAuthorityImpl(roleName);
        }
        // org.springframework.security.userdetails.User can't use null password.
        String password = user.getPassword() == null ? "" : user.getPassword();
        UserDetails userdetail = new org.springframework.security.userdetails.User(user.getLoginName(), password, user
                .isEnabled(), user.isAccountNonExpired(), user.isCredentialsNonExpired(), user.isAccountNonLocked(),
                arrayAuths);

        return userdetail;
    }
   
    @Required
    public void setUserManager(UserAccoutService userManager) {
        this.userManager = userManager;
    }

}

[ 本帖最后由 isky8888 于 2009-9-21 22:24 编辑 ]
顶部
javaside
SpringSide社员
Rank: 1



UID 12107
精华 0
积分 21
帖子 21
阅读权限 10
注册 2008-9-27
状态 离线
发表于 2009-9-22 18:21  资料 短消息 
isky8888 不错的思路,多谢了。
顶部
kaki
SpringSide初阶积极社员
Rank: 2Rank: 2



UID 14953
精华 0
积分 178
帖子 170
阅读权限 20
注册 2009-4-2
状态 在线
发表于 2009-9-22 23:24  资料 短消息 
不太明白,学习一下子。
顶部
moofapuy
SpringSide社员
Rank: 1



UID 18945
精华 0
积分 2
帖子 2
阅读权限 10
注册 2009-10-29
状态 离线
发表于 2009-11-2 11:35  资料 短消息 
很好,不得不顶...........!
















美女贴图  www.oice.com.cn
顶部
 


© 2005-2006 SpringSide.org.cn, Host on RedSaga.com, Powered by Discuz 5.0   Get SpringSide at SourceForge.net. Fast, secure and Free Open Source software downloads

粤ICP备08025786号