mongodb java 权限_Java开发之spring security实现基于MongoDB的认证功能

本文实例讲述了Java开发之spring security实现基于MongoDB的认证功能。分享给大家供大家参考,具体如下:

spring security对基于数据库的认证支持仅限于JDBC,而很多项目并非使用JDBC,比如Nosql数据库很多使用的是 Mongo Java Driver,这样就无法用默认的进行支持认证。

如果项目不是使用JDBC,没么解决办法就是:自己定义一个认证服务。

新建一个CustomUserDetailsService类

这个类实现了UserDetailsService接口。代码如下:

public class CustomUserDetailsService implements UserDetailsService {

@Autowired

MongoDBHelper dbhelper;

/*

* 根据用户名加载认证用户

*/

@Override

public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

//步骤一:从数据库中查出用户数据

MongoDatabase db = dbhelper.getDB("huanle");

MongoCollection users = db.getCollection("user");

Document filter = new Document();

filter.append("account",username);

Document result = users.find(filter).first();

if(result==null) throw new UsernameNotFoundException(username+"不存在");

//步骤二:装配到UserDetails,相当于生成了一个标签

UserDetails userDetails = new User(result.getString("account"), result.getString("password"), true, true, true, true,getAuthorities(result.getInteger("access")) );

return userDetails;

}

/** 根据用户级别,获得角色列表。比如用户级别为1,表示该用户是管理员,则返回ROLE_USER,ROLE_ADMIN

* @param access 用户级别

* @return 用户角色列表

*/

public Collection getAuthorities(int access){

List authList = new ArrayList(2);

authList.add(new SimpleGrantedAuthority("ROLE_USER"));

if(access==1){

authList.add(new SimpleGrantedAuthority("ROLE_ADMIN"));

}

return authList;

}

}

修改spring-security.xml文件

login-processing-url="/login"

authentication-failure-url="/login?error"

default-target-url="/"

username-parameter="phone"

password-parameter="password" />

logout-url="/loginout"

logout-success-url="/login"/>

这里通过标签定义了登录,其相关属性说明如下:

属性

说明

login-page=”/login”

登录界面的位置

login-processing-url=”/login”

登录表单post到“/login”

authentication-failure-url=”/login?error”

登录失败,重定向到“/login?error”

default-target-url=”/”

登录成功,重定向到“/”

username-parameter=”phone”

登录表单中,名为phone的参数作为认证的username

password-parameter=”password”

登录表单中,名为password的参数作为认证的password

通过使用我们自定义的认证服务

最后,看一下login.jsp

pageEncoding="UTF-8"%>

用户登录
  • 手机号:
  • 密码:

可见,这个登录页面跟平常使用的并无区别,这都要归功于username-parameter="phone"和password-parameter="password"这两个配置。

总结

从上面的代码可见,自定义的用户认证服务CustomUserDetailsService的唯一任务就是:根据用户名从数据库获取用户数据,生成一个UserDetails实例。

这个UserDetails实例包含了用户名和密码,spring security从这个对象里获得数据库里的用户数据,和从form里提交的用户名、密码进行比对,即可认证用户。

希望本文所述对大家java程序设计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值