ssm框架项目实例介绍(ssm开发项目实例)

今天给各位分享ssm框架项目实例介绍的知识,其中也会对ssm开发项目实例进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java使用SSM框架做的案例,启动Tomcat后始终报错,提示无法加载applicationContext.xml配置文件!

你现在applicationContext.xml的所在路径是:src/main/resources/applicationContext.xml,你的配置文件classpath:applicationContext.xml代表的路径是src/applicationContext,所以找不到。

ssm框架访问控制应该怎么做

这个就在在人员表了添加一个身份的字段 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-nameshiroFilter/filter-name

filter-classorg.springframework.web.filter.DelegatingFilterProxy/filter-class

init-param

param-nametargetFilterLifecycle/param-name

param-valuetrue/param-value

/init-param

/filter

filter-mapping

filter-nameshiroFilter/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=""

xmlns:xsi=""

xsi:schemaLocation=" "

!-- 配置缓存管理器 --

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

~

~    

~

~ 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 shiro;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.credential.HashedCredentialsMatcher;import org.apache.shiro.authz.AuthorizationInfo;import org.apache.shiro.authz.SimpleAuthorizationInfo;import org.apache.shiro.crypto.hash.Md5Hash;import org.apache.shiro.crypto.hash.SimpleHash;import org.apache.shiro.realm.AuthorizingRealm;import org.apache.shiro.subject.PrincipalCollection;import org.apache.shiro.util.ByteSource;import org.springframework.beans.factory.annotation.Autowired;import bean.user;import dao.userdao;public 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登录验证到这里完了

ssm框架毕业答辩常见问题有哪些, 例如ssm如何实现数据库的连接?

一、Spring常见问题

1、Spring 在ssm中起什么作用?

Spring:轻量级框架

作用:Bean工厂,用来管理Bean的生命周期和框架集成。

两大核心:

IOC/DI(控制反转/依赖注入) :把dao依赖注入到service层,service层反转给action层,Spring顶层容器为BeanFactory

AOP:面向切面编程

2、Spring的事务?

编程式事务管理:编程方式管理事务,极大灵活性,难维护。

声明式事务管理:可以将业务代码和事务管理分离,用注解和xml配置来管理事务。

3、IOC 在项目中的作用?

作用:Ioc解决对象之间的依赖问题,把所有Bean的依赖关系通过配置文件或注解关联起来,降低了耦合度。

4、Spring的配置文件中的内容?

开启事务注解驱动

事务管理器

开启注解功能,并配置扫描包

配置数据库

配置SQL会话工厂,别名,映射文件

不用编写Dao层的实现类

5、Spring下的注解?

注册

@Controller @Service @Component

注入

@Autowired @Resource

请求地址

@RequestMapping

返回具体数据类型而非跳转

@ResponseBody

6、Spring DI 的三种方式?

构造器注入:通过构造方法初始化

constructor-arg index="0" type="java.lang.String" value="宝马"/constructor-arg

setter方法注入:通过setter方法初始化

property name="id" value="1111"/property

接口注入

7、Spring主要使用了什么模式?

工厂模式:每个Bean的创建通过方法

单例模式:默认的每个Bean的作用域都是单例

代理模式:关于Aop的实现通过代理模式

8、IOC,AOP的实现原理?

IOC:通过反射机制生成对象注入

AOP:动态代理

二、SpringMvc常见问题

1、SpringMvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决?

问题:单例模式,在多线程访问时有线程安全问题

解决方法:不要用同步,在控制器里面不能写字段

2、SpringMvc 中控制器的注解?

@Controller:该注解表明该类扮演控制器的角色

3、@RequestMapping 注解用在类上的作用?

作用:用来映射一个URL到一个类或者一个特定的处理方法上

4、前台多个参数,这些参数都是一个对象,快速得到对象?

方法:直接在方法中声明这个对象,SpringMvc就自动把属性赋值到这个对象里面

5、SpringMvc中函数的返回值?

String,ModelAndView,List,Set 等

一般String,Ajax请求,返回一个List集合

6、SpringMvc中的转发和重定向?

转发: return:"hello"

重定向 :return:"redirect:hello.jsp"

7、SpringMvc和Ajax之间的相互调用?

通过JackSon框架把java里面对象直接转换成js可识别的json对象,具体步骤如下:

1、加入JackSon.jar

2、在配置文件中配置json的映射

3、在接受Ajax方法里面直接返回Object,list等,方法前面需要加上注解@ResponseBody

8、SpringMvc的工作流程图?

请点击输入图片描述

1、DispatcherServlet前端控制器接收发过来的请求,交给HandlerMapping处理器映射器

2、HandlerMapping处理器映射器,根据请求路径找到相应的HandlerAdapter处理器适配器(处理器适配器就是那些拦截器或Controller)

3、HandlerAdapter处理器适配器,处理一些功能请求,返回一个ModelAndView对象(包括模型数据、逻辑视图名)

4、ViewResolver视图解析器,先根据ModelAndView中设置的View解析具体视图

5、然后再将Model模型中的数据渲染到View上

9、Struts2 和 SpringMvc的区别?

入口不同:

Struts2:filter过滤器

SpringMvc:一个Servlet即前端控制器

开发方式不同:

Struts2:基于类开发,传递参数通过类的属性,只能设置为多例

SpringMvc:基于方法开发(一个url对应一个方法),请求参数传递到方法形参,可以为单例也可以为多例(建议单例)

请求方式不同:

Struts2:值栈村塾请求和响应的数据,通过OGNL存取数据

SpringMvc:通过参数解析器将request请求内容解析,给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过request域传输到页面,jsp视图解析器默认使用的是jstl。

三、Mybatis常见问题

1、Ibatis和Mybatis?

Ibatis:2010年,apache的Ibatis框架停止更新,并移交给了google团队,同时更名为MyBatis。从2010年后Ibatis在没更新过,彻底变成了一个孤儿框架。一个没人维护的框架注定被mybatis拍在沙滩上。

Mybatis:Ibatis的升级版本。

2、什么是Mybatis的接口绑定,有什么好处?

Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。

3、什么情况用注解,什么情况用xml绑定?

注解使用情况:Sql语句简单时

xml绑定使用情况:xml绑定 (@RequestMap用来绑定xml文件)

4、Mybatis在核心处理类叫什么?

SqlSession

5、查询表名和返回实体Bean对象不一致,如何处理?

映射键值对即可

result column="title" property="title" javaType="java.lang.String"/

column:数据库中表的列名

property:实体Bean中的属性名

6、Mybatis的好处?

把Sql语句从Java中独立出来。

封装了底层的JDBC,API的调用,并且能够将结果集自动转换成JavaBean对象,简化了Java数据库编程的重复工作。

自己编写Sql语句,更加的灵活。

入参无需用对象封装(或者map封装),使用@Param注解

7、Mybatis配置一对多?

collection property="topicComment" column="id" ofType="com.tmf.bbs.pojo.Comment" select="selectComment" /

property:属性名

column:共同列

ofType:集合中元素的类型

select:要连接的查询

8、Mybatis配置一对一?

association property="topicType" select="selectType" column="topics_type_id" javaType="com.tmf.bbs.pojo.Type"/

property:属性名

select:要连接的查询

column:共同列

javaType:集合中元素的类型

9 、${} 和 #{}的区别?

${}:预编译处理,把${}直接替换成变量的值,不做任何转换。

#{}:字符串替换,sql中的#{}替换成?,有效的防止Sql语句注入。

总结:一般用#{}来进行列的代替

10、获取上一次自动生成的主键值?

select last _insert_id()

11、Mybatis如何分页,分页原理?

RowBounds对象分页

在Sql内直接书写,带有物理分页

12、Mybatis工作原理?

请点击输入图片描述

原理:

通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件中构建出SqlSessionFactory。

SqlSessionFactory开启一个SqlSession,通过SqlSession实例获得Mapper对象并且运行Mapper映射的Sql语句。

完成数据库的CRUD操作和事务提交,关闭SqlSession。

“SSM框架”是什么意思?

SSM全称是Spring+SpringMVC+MyBatis。

SSM框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。

1、Spring

Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。

Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地`new`一个对象,而是让Spring框架帮你来完成这一切。

2、SpringMVC

SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。

3、mybatis

mybatis是对jdbc的封装,它让数据库底层操作变的透明。

mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。

扩展资料

SSM框架集是软件架构的一个部分。以下是软件架构的种类:

1、逻辑架构

软件系统系统当中的各个元件之间所存在的关系,比如外部系统接口、用户界面、商业逻辑元件、数据库等。

2、物理架构

究竟是怎样做到在硬件当中放置软件元件。例如处于上海与北京进行分布的分布式系统的物理架构,这也就是说全部的元件都是属于物理设备,主要的有主机、整合服务器、应用服务器、代理服务器、存储服务器、报表服务器、Web服务器、网络分流器等。

3、系统架构

相应的系统存在着性能、强壮性、可扩展性、灵活性、可靠性等这些非功能性特征。设计系统的架构比要让系统架构设计人员存在着过硬的软件与硬件的性能与功能,往往从事这样的工作这是属于设计系统架构环节最为困难的工作。

除了以上所提到的之外,基于各个不同的角度进行分析,都能够了解到划分元件、决定设计这两个架构的要素。一个软件系统的元件首先就是属于一种逻辑元件。

那么究竟怎样做到在硬件中有效的放置以上所提到的逻辑元件,还有的就是这些元件怎样发挥作用在整个系统的性能、强壮性、可扩展性、灵活性、可靠性等。这也是属于特别重要的信息。

比如在一个中等规模的数据库应用系统往往大致存在一百个左右数据表,那么这也就使得设计一个系统往往必须依托一百页规模架构进行文档设计。

参考资料:百度百科-SSM

一个月能学完ssm框架吗

一般来说,一个月能学完ssm框架。SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。

mybatis

mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。

关于ssm框架项目实例介绍和ssm开发项目实例的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

1、本网站名称:源码村资源网
2、本站永久网址:https://www.yuanmacun.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
源码村资源网 » ssm框架项目实例介绍(ssm开发项目实例)
您需要 登录账户 后才能发表评论

发表评论

欢迎 访客 发表评论