/* * Copyright 2012 The Solmix Project * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.gnu.org/licenses/ * or see the FSF site: http://www.fsf.org. */ package org.solmix.security.realm; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; import org.solmix.api.datasource.DSRequest; import org.solmix.api.datasource.DSResponse; import org.solmix.api.exception.SlxException; import org.solmix.fmk.context.SlxContext; import org.solmix.fmk.criterion.Criteria; import org.solmix.fmk.datasource.FetchOp; /** * DataSource powered Shiro realm. * @author solmix.f@gmail.com * @version $Id$ 2013-8-18 */ public class DataSourceRealm extends AuthorizingRealm { public static final String REALM_NAME="DSRealm"; /** * {@inheritDoc} * * @see org.apache.shiro.realm.AuthorizingRealm#doGetAuthorizationInfo(org.apache.shiro.subject.PrincipalCollection) */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { System.out.println("======================="); return null; } /** * {@inheritDoc} * * @see org.apache.shiro.realm.AuthenticatingRealm#doGetAuthenticationInfo(org.apache.shiro.authc.AuthenticationToken) */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { UsernamePasswordToken up=(UsernamePasswordToken)token; String userName=up.getUsername(); char[] pwd=up.getPassword(); if(userName==null){ throw new AuthenticationException("User name must be not null."); } if(pwd==null) throw new AuthenticationException("Password name must be not null."); try { //get the password SimpleAuthenticationInfo crypwd =SlxContext.doInSystemContext(new FetchOp<SimpleAuthenticationInfo>("SECURITY"){ @Override public SimpleAuthenticationInfo fetch(DSRequest request) throws SlxException { DSResponse resp=request.execute(); return resp.getSingleResult(SimpleAuthenticationInfo.class); } }.withCriteria(new Criteria("USERNAME", userName).add("PASSWORD", pwd).add("HOST", up.getHost()).add("REMEMBER_ME", up.isRememberMe())) .withOpId("doGetAuthenticationInfo")); return crypwd; } catch (SlxException e) { throw new AuthenticationException(e.getMessage()); } } }