这个就在在人员表了添加一个身份的字段 user_rank ,用这个来控制。用户登录到时候就会用登录信息,把这个 user_rank 字段带出来,在页面或者链接时候加上判断,哈这是简单的,看下官方的。
shiro安全框架是目前为止作为登录注册最常用的框架,因为它十分的强大简单,提供了认证、授权、加密和会话管理等功能 。
shiro能做什么?
认证:验证用户的身份
授权:对用户执行访问控制:判断用户是否被允许做某事
会话管理:在任何环境下使用 Session API,即使没有 Web 或EJB 容器。
加密:以更简洁易用的方式使用加密功能,保护或隐藏数据防止被偷窥
Realms:聚集一个或多个用户安全数据的数据源
单点登录(SSO)功能。
为没有关联到登录的用户启用 "Remember Me“ 服务
Shiro 的四大核心部分
Authentication(身份验证):简称为“登录”,即证明用户是谁。
Authorization(授权):访问控制的过程,即决定是否有权限去访问受保护的资源。
Session Management(会话管理):管理用户特定的会话,即使在非 Web 或 EJB 应用程序。
Cryptography(加密):通过使用加密算法保持数据安全
shiro的三个核心组件:
Subject :正与系统进行交互的人,或某一个第三方服务。所有 Subject 实例都被绑定到(且这是必须的)一个SecurityManager 上。
SecurityManager:Shiro 架构的心脏,用来协调内部各安全组件,管理内部组件实例,并通过它来提供安全管理的各种服务。当 Shiro 与一个 Subject 进行交互时,实质上是幕后的 SecurityManager 处理所有繁重的 Subject 安全 *** 作。
Realms :本质上是一个特定安全的 DAO。当配置 Shiro 时,必须指定至少一个 Realm 用来进行身份验证和/或授权。Shiro 提供了多种可用的 Realms 来获取安全相关的数据。如关系数据库(JDBC),INI 及属性文件等。可以定义自己 Realm 实现来代表自定义的数据源。
shiro整合SSM框架:
1.加入 jar 包:以下jar包自行百度下载
2.配置 web.xml 文件
在web.xml中加入以下代码—shiro过滤器。
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.在 Spring 的配置文件中配置 Shiro
Springmvc配置文件中:<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
depends-on="lifecycleBeanPostProcessor"/>
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager" ref="securityManager"/>
</bean>
Spring配置文件中导入shiro配置文件:
<!-- 包含shiro的配置文件 -->
<import resource="classpath:applicationContext-shiro.xml"/>
新建applicationContext-shiro.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置缓存管理器 -->
<bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
<!-- 指定 ehcache 的配置文件,下面会给到 -->
<property name="cacheManagerConfigFile" value="classpath:ehcache-shiro.xml"/>
</bean>
<!-- 配置进行授权和认证的 Realm,要新增一个java类来实现,下面会有,class=包名.类名,init-methood是初始化的方法 -->
<bean id="myRealm"
class="shiro.MyRealm"
init-method="setCredentialMatcher"></bean>
<!-- 配置 Shiro 的 SecurityManager Bean. -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="cacheManager" ref="cacheManager"/>
<property name="realm" ref="myRealm"/>
</bean>
<!-- 配置 Bean 后置处理器: 会自动的调用和 Spring 整合后各个组件的生命周期方法. -->
<bean id="lifecycleBeanPostProcessor"
class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
<!-- 配置 ShiroFilter bean: 该 bean 的 id 必须和 web.xml 文件中配置的 shiro filter 的 name 一致 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- 装配 securityManager -->
<property name="securityManager" ref="securityManager"/>
<!-- 配置登陆页面 -->
<property name="loginUrl" value="/index.jsp"/>
<!-- 登陆成功后的一面 -->
<property name="successUrl" value="/shiro-success.jsp"/>
<property name="unauthorizedUrl" value="/shiro-unauthorized.jsp"/>
<!-- 具体配置需要拦截哪些 URL, 以及访问对应的 URL 时使用 Shiro 的什么 Filter 进行拦截. -->
<property name="filterChainDefinitions">
<value>
<!-- 配置登出: 使用 logout 过滤器 -->
/shiro-logout = logout
/shiro-* = anon
/user.jsp = roles[user]
/admin.jsp = roles[admin]
/** = authc </value>
</property>
</bean></beans>
导入ehcache-shiro.xml配置文件:
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License")you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License. --><!-- EhCache XML configuration file used for Shiro spring sample application --><ehcache>
<!-- Sets the path to the directory where cache .data files are created.
If the path is a Java System Property it is replaced by
its value in the running VM.
The following properties are translated:
user.home - User's home directory
user.dir - User's current working directory
java.io.tmpdir - Default temp file path -->
<diskStore path="java.io.tmpdir/shiro-spring-sample"/>
<!--Default Cache configuration. These will applied to caches programmatically created through
the CacheManager.
The following attributes are required:
maxElementsInMemory - Sets the maximum number of objects that will be created in memory
eternal - Sets whether elements are eternal. If eternal, timeouts are ignored and the
element is never expired.
overflowToDisk - Sets whether elements can overflow to disk when the in-memory cache
has reached the maxInMemory limit.
The following attributes are optional:
timeToIdleSeconds - Sets the time to idle for an element before it expires.
i.e. The maximum amount of time between accesses before an element expires
Is only used if the element is not eternal.
Optional attribute. A value of 0 means that an Element can idle for infinity.
The default value is 0.
timeToLiveSeconds - Sets the time to live for an element before it expires.
i.e. The maximum time between creation time and when an element expires.
Is only used if the element is not eternal.
Optional attribute. A value of 0 means that and Element can live for infinity.
The default value is 0.
diskPersistent - Whether the disk store persists between restarts of the Virtual Machine.
The default value is false.
diskExpiryThreadIntervalSeconds- The number of seconds between runs of the disk expiry thread. The default value
is 120 seconds.
memoryStoreEvictionPolicy - Policy would be enforced upon reaching the maxElementsInMemory limit. Default
policy is Least Recently Used (specified as LRU). Other policies available -
First In First Out (specified as FIFO) and Less Frequently Used
(specified as LFU) -->
<defaultCache maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
/>
<!-- We want eternal="true" (with no timeToIdle or timeToLive settings) because Shiro manages session
expirations explicitly. If we set it to false and then set corresponding timeToIdle and timeToLive properties,
ehcache would evict sessions without Shiro's knowledge, which would cause many problems
(e.g. "My Shiro session timeout is 30 minutes - why isn't a session available after 2 minutes?"
Answer - ehcache expired it due to the timeToIdle property set to 120 seconds.)
diskPersistent=true since we want an enterprise session management feature - ability to use sessions after
even after a JVM restart. -->
<cache name="shiro-activeSessionCache"
maxElementsInMemory="10000"
eternal="true"
overflowToDisk="true"
diskPersistent="true"
diskExpiryThreadIntervalSeconds="600"/>
<cache name="org.apache.shiro.realm.SimpleAccountRealm.authorization"
maxElementsInMemory="100"
eternal="false"
timeToLiveSeconds="600"
overflowToDisk="false"/></ehcache>
准备好了,接下来要写Realm方法了,新建shiro包,在包下新建MyRealm.java文件继承AuthorizingRealm
package shiroimport org.apache.shiro.authc.AuthenticationExceptionimport org.apache.shiro.authc.AuthenticationInfoimport org.apache.shiro.authc.AuthenticationTokenimport org.apache.shiro.authc.SimpleAuthenticationInfoimport org.apache.shiro.authc.credential.HashedCredentialsMatcherimport org.apache.shiro.authz.AuthorizationInfoimport org.apache.shiro.authz.SimpleAuthorizationInfoimport org.apache.shiro.crypto.hash.Md5Hashimport org.apache.shiro.crypto.hash.SimpleHashimport org.apache.shiro.realm.AuthorizingRealmimport org.apache.shiro.subject.PrincipalCollectionimport org.apache.shiro.util.ByteSourceimport org.springframework.beans.factory.annotation.Autowiredimport bean.userimport dao.userdaopublic class MyRealm extends AuthorizingRealm {
@Autowired private userdao userdao
String pass /**
* 授权:
*
*/
@Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo()
Object principal = principalCollection.getPrimaryPrincipal()//获取登录的用户名
if("admin".equals(principal)){ //两个if根据判断赋予登录用户权限
info.addRole("admin")
} if("user".equals(principal)){
info.addRole("list")
}
info.addRole("user")
return info
} /*
* 用户验证
*
*/
@Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
//1. token 中获取登录的 username! 注意不需要获取password.
Object principal = token.getPrincipal()
//2. 利用 username 查询数据库得到用户的信息.
user user=userdao.findbyname((String) principal) if(user!=null){
pass=user.getPass()
}
String credentials = pass //3.设置盐值 ,(加密的调料,让加密出来的东西更具安全性,一般是通过数据库查询出来的。 简单的说,就是把密码根据特定的东西而进行动态加密,如果别人不知道你的盐值,就解不出你的密码)
String source = "abcdefg"
ByteSource credentialsSalt = new Md5Hash(source)
//当前 Realm 的name
String realmName = getName() //返回值实例化
SimpleAuthenticationInfo info =
new SimpleAuthenticationInfo(principal, credentials,
credentialsSalt, realmName)
return info
} //init-method 配置.
public void setCredentialMatcher(){
HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher()
credentialsMatcher.setHashAlgorithmName("MD5")//MD5算法加密
credentialsMatcher.setHashIterations(1024)//1024次循环加密
setCredentialsMatcher(credentialsMatcher)
}
//用来测试的算出密码password盐值加密后的结果,下面方法用于新增用户添加到数据库 *** 作的,我这里就直接用main获得,直接数据库添加了,省时间
public static void main(String[] args) {
String saltSource = "abcdef"
String hashAlgorithmName = "MD5"
String credentials = "passwor"
Object salt = new Md5Hash(saltSource) int hashIterations = 1024
Object result = new SimpleHash(hashAlgorithmName, credentials, salt, hashIterations)
System.out.println(result)
}
}
好了,接下来我们写一个简单的action来通过shiro登录验证。
//登录认证
@RequestMapping("/shiro-login") public String login(@RequestParam("username") String username,
@RequestParam("password") String password){
Subject subject = SecurityUtils.getSubject()
UsernamePasswordToken token = new UsernamePasswordToken(username, password)
try { //执行认证 *** 作. subject.login(token)
}catch (AuthenticationException ae) {
System.out.println("登陆失败: " + ae.getMessage()) return "/index"
}
return "/shiro-success"
}
//温馨提示:记得在注册中密码存入数据库前也记得加密哦,提供一个utils方法//进行shiro加密,返回加密后的结果public static String md5(String pass){
String saltSource = "blog"
String hashAlgorithmName = "MD5"
Object salt = new Md5Hash(saltSource)int hashIterations = 1024
Object result = new SimpleHash(hashAlgorithmName, pass, salt, hashIterations)
String password = result.toString()return password
}
好了,shiro登录验证到这里完了
System Safety Monitor(以下简称为SSM),它是一款俄罗斯出品的系统监控软件,通过监视系统特定的文件(如注册表等)及应用程序,达到保护系统安全的目的。在某些功能上比Winpatrol更强大 。安装并启动(可能需手动到安装目录中运行SysSafe.exe)SSM后,点击d出的LOGO窗口中的Close this windows(关闭窗口)项,关闭该窗口。这时SSM已经启动,并开始进行监视,我们可以在系统托盘内看到软件图标。
SSM贴身保护你的Windows
SSM既然自称System Safety Monitor(系统安全监视器),那么就要看看SSM的拿手绝活。
小提示
让它随Windows一同启动
只有让SSM随时启动才能起到监视和保卫系统安全的功效,因此要设置让其自动随Windows一同启动。右击系统托盘的软件图标,选择 Preferences(参数选项),打开System Safety Monitor - Preferences窗口,点击Options(选项)标签。确认左侧所选为General(常规),然后将右侧SSM Startup mode(SSM启动模式)项修改为Start automatically as aservice(以服务形式加载)(见图1)。
1.打开SSM的监控
第一步:打开System Safety Monitor - Preferences窗口,点击Plugins(插件)标签。
第二步:确认Enable Plugins(激活插件)项已被勾选,这时SSM可以对Start Menu(“开始”菜单中的启动组)、Services(加载的系统服务)、Registry(注册表启动项)、INI Files(系统INI文件)及IExplore(IE)实施全方位监控(见图2)。
2.任意添加监控项目
相比我们以前强烈推荐的Winpatrol,SSM更优秀之处在于可以“自定义”,比如想让SSM监视一个注册表中[HKEY_CLASSES_ROOT\.abs]下“默认”键的键值改动,你可以手工添加。
第一步:同样是在Plugins标签下,在窗口右侧选择Registry→Configuration。
第二步:在右侧窗格中右击,选择Add new item(添加新项目),在d出窗口的Path中输入HKEY_CLASSES_ROOT\.abr,在Name中输入“默认”,在Value中输入“默认”键键值的,即Photoshop.BrushesFile,在Value type下选择0 String即可。
第三步:设置完成后,当该键值被修改后,SSM就会d出警告窗口(见图3),按F2键可阻止修改,按F3键同意修改。
对一个键值的修改已经如此,对于那些网络病毒就更能轻松解决。笔者曾用“证券大盗”等多款病毒对SSM进行测试,它都能轻松应对。
功能强大的程序监控
SSM另一强大而有用的监控就是应用程序监控,它能监控程序开启过程的一举一动。并且不管这个程序是以何种方式开启,无论是用户双击直接打开,还是由其他程序间接打开,甚至是由于系统漏洞而被悄悄执行的错误程序(包括病毒),也不管这个程序是何种格式(EXE/DLL等),SSM只要发现有新程序被开启,均会报告用户,最终由用户决定该程序是否运行。
1.实战SSM的程序监控
现在很多软件的安装程序,在给用户安装软件的同时,还会“默认”安装一些用户不需要的东西(广告/插件等)。一旦你安装了这种软件就同时在不知情之下往硬盘“塞垃圾”。这时,SSM就能发挥拦截作用了。
SSM默认是未开启程序监控,需要用户自行开启,方法很简单,只要右击系统托盘内软件图标,选择Watch App Activity(监视应用程序)即可。
笔者再运行含有广告插件的软件,如“QQ自动聊天器”,在安装时除了原程序,SSM提示还有新程序想运行(见图4)。
在这里,SSM的程序监控对于程序开启提供五个不同的选择。所对应的快捷按键分别是F1到F5,每项都各有含义:F1是“总是允许”,F2是“总是阻止”,F3是“只允许系统管理员,不包括其他用户”,F4是“只允许这一次”(默认选项),而F5是“只阻止这一次”,而这里自然要按F2或F5。
之后继续安装,但居然又出现了广告插件,自然使用相同方法将其拦截即可。
如果是病毒,SSM也同样不含糊:笔者空闲时也喜欢下载电子书看看。但如果下载下来的电子书是夹带了病毒,并且防病毒软件没有检测到怎么办?
不要紧,还有SSM。前段时间笔者从网下载了EXE格式的电子书,打开该电子书后,SSM的程序监控很自然请求用户选择,由于是要看书,所以是选择 F1、F3或F4通过啦,可是令人意外的是,又d出SSM的警告,还有程序要运行,书打开了,自然是有问题,不管好坏先按下F2或F5阻止运行。
后经过分析发现原来这本电子书使用了加壳处理,并绑定了病毒,虽然绕过了病毒防火毒,但SSM是从不会让你失望的。
小提示
在如图4所示界面中点击Scan项,可启动杀毒软件对程序进行杀毒。但要注意需要先在SSM中设置好杀毒软件目录,否则,这里会显示Locate。杀毒软件设置方法如下:打开System Safety Monitor - Preferences窗口,点击Options项,在窗口左侧点击Misc,然后在窗口右侧的Antivirus中设置即可(见图5)。
2.添加修改应用程序规则
如果希望针对不同的程序设置不同规则,可以在SSM中进行详细设置。
第一步:打开System Safety Monitor - Preferences窗口,点击Application Rules(应用程序规则)标签。
第二步:这里列出了所有正在运行的程序,然后将Rule(规则)默认的Allowed(F3)修改为Blocked(F2)则会阻止该程序运行。
第三步:双击程序,可打开针对该程序的高级规则设置窗口,可进一步设置该程序是否能被其他软件所调用或是调用其他软件(见图6)。
小提示
SSM在监控之外
★“黑名单”功能:如果不想别人使用你的MSN Messenger及Outlook Express,可以打开System Safety Monitor - Preferences窗口,点击Windows标签下的Filters项,添加上“MSN Messenger”(不含引号)及“收件箱 - Outlook Express”(不含引号)两项,再右击系统托盘SSM图标,勾选Filter windows captions(窗口标题过滤)项。
这样两个程序只要一打开就马上消失掉。你可根据自己的需要将其他程序窗口标题栏填到这里即可。
★导出配置文件:点击System Safety Monitor - Preferences窗口中Service标签下的Save current config file as备份你的配置文件,以便升级或重装时使用。
参考资料:http://www.cpcwedu.com/Document/MSstudy/090804976.htm
另不推荐菜鸟使用!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)