Apphe Shroの簡単な使用
12886 ワード
Apphe Shroの簡単な理解は、javaにおいて権限制御機能を行い、主に粗粒度(URLレベルの権限に基づいて制御する)と細粒度(方法レベルの権限に基づいて制御する)の2つに分けられる.主に使うフレームはSpring SecurityとApachhe Shroが一般的で、前者は複雑で、springに依存しています.後者はもっと軽い量を使って、もっと簡単で、springに完全に依存しないで、単独で を使うことができます.粗粒度権限制御(URLレベル権限による制御) 粗粒度権限制御は、一般に、主としてFileterフィルタに基づいて実行される である.は、一般的に、少なくとも5つのテーブルが必要です.すなわち、ユーザーテーブル、パーミッションテーブル(Permission)、キャラクターテーブル(Role)、ユーザーとキャラクターの関連表、キャラクターとパーミッションの関連表です. Menuテーブルを追加する必要がある場合、メニューを追加し、異なるユーザに対して異なるメニュー管理を表示しやすく、Menuテーブルを構成する場合は、さらに、役割とメニュー関連テーブル を設定する必要がある.
Apphe Shroを使って権限制御を行う. Aache Shroシステム構造は6つの部分があります. Authentication認証-ユーザ登録 Authortization授権—ユーザーはどのような権限を持っていますか? Cryptgraphyセキュリティデータ暗号化 セッション管理 Web Integration webシステム統合 Integrationsは、他のアプリケーションを統合し、spring、キャッシュフレーム mavenを用いて管理し、対応する依存jarパケットを導入する .
Shroを使用した権限制御は、4つの主要な方法があります. プログラムにおいて、Subjectプログラムによる権限制御 を行う. Filterを構成し、URLレベルの粗粒度権限制御を実現する .は、プロキシを構成し、注釈に基づいて、微細度権限制御 を実現する.ページにshiroカスタムラベルを使用してページ表示権限制御 を実現する.
ユーザ登録機能は、Aache Shroを使用して実現される(URL粗粒度レベルを使用する).
第一歩:設定web.xml
<dependency>
<groupId>org.apache.shirogroupId>
<artifactId>shiro-allartifactId>
<version>1.3.2version>
dependency>
ユーザ登録機能は、Aache Shroを使用して実現される(URL粗粒度レベルを使用する).
第一歩:設定web.xml
<filter>
<filter-name>shiroFilterfilter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxyfilter-class>
filter>
<filter-mapping>
<filter-name>shiroFilterfilter-name>
<url-pattern>/*url-pattern>
filter-mapping>
第二ステップ:appication Contact.xmlを配置し、関連する名前空間を導入する.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">
ステップ3:配置に関するbean<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager">property>
<property name="loginUrl" value="/login.html">property>
<property name="successUrl" value="/index.html">property>
<property name="unauthorizedUrl" value="/unauthorized.html">property>
<property name="filterChainDefinitions">
<value>
/login.html* = anon
/css/** = anon
/js/** = anon
/images/** = anon
/validatecode.jsp = anon
/user_login.action* = anon
/** = authc
value>
property>
bean>
第四ステップ:struts 2を使ってフロントから転送されたデータを受信する@Controller
@ParentPackage("json-default")
@Namespace("/")
@Scope("prototype")
public class UserAction extends BaseAction<User> {
// User ,
private static final long serialVersionUID = -6905277651888140750L;
@Action(value = "user_login", results = { @Result(name = "success", type = "redirect", location = "./index.html"),
@Result(name = "login", type = "redirect", location = "./login.html")})
//
public String login() {
// shiro , subject
Subject subject = SecurityUtils.getSubject();
//
AuthenticationToken token = new UsernamePasswordToken(model.getUsername(),model.getPassword());
try {
subject.login(token);
//
return SUCCESS;
} catch (AuthenticationException e) {
e.printStackTrace();
// ,
return LOGIN;
}
}
}
ステップ5:Realmオブジェクトを作成し、本物の登録認証を実現する(開発中はAuthorigingRealmを直接継承するのが一般的です).@Service("bosRealm")
public class BosRealm extends AuthorizingRealm {
@Autowired
private UserService userService;
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
System.out.println("shiro ......");
UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token;
//
User user = userService.findByUsername(usernamePasswordToken.getUsername());
if (user == null) {
// ,
return null;
} else {
//
// ,securityManager , ,
return new SimpleAuthenticationInfo(user, user.getPassword(), getName());
}
}
}
第六ステップ:service層とdao層を書いて、安全管理器を配置する.
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="bosRealm">property>
bean>
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor">bean>
これにより、ユーザー登録権限ブロックが簡単に実現され、ユーザーが存在しない場合、org.apacthe.shiro.authc.UniknownAccent Exception異常を報告します.ユーザー名のパスワードが間違ったら、org.apache.auth.IncorectCredentialsException異常を報告します.